ホームページでフォーム作成をしています。
テストサーバーで作ったフォームがうまく動いたため、本サーバーに移して確認をしたところ、まったくフォームがデータをPHPに渡さなくなってしまいました。
切り分けのために、非常に簡単なプログラムを書いて実行したところ、やはりデータが渡されません。
test.php
<!doctype html> <html> <head> <meta charset="utf-8"> <title>フォーム</title> </head> <body> <form action="test2.php" method="post"> <input type="text" name="name" id="name"> <input type="submit"> </form> </body> </html>
test2.php
<?php $msg = $_POST['name']; ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>結果</title> </head> <body> 結果<?php echo $msg; ?> </body> </html>
結果、test2.phpに遷移した後、画面には「結果」という文字だけが表示されました。
試しに、test.phpのメソッドを method="get"に変えて、test2.phpにて$_GET['name'];にしたところ、正常にデータが引き渡されて、表示されました。
本サーバーには、ルートに.htaccessが設置してあるので、それが原因かと思い、サーバー上から一時的に削除してみたところ、POSTでもデータが引き渡され、本番用のフォームも正常に動作しました。
もともとの.htaccessの中身は以下の通りです
htaccess
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.t-hoso\.net$ RewriteRule ^(.*)$ https://t-hoso.net/$1 [R=301,L] ErrorDocument 404 /404.html RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php RewriteCond %{THE_REQUEST} \.(php|html)\ HTTP RewriteRule ^(.*)\.(php|html)$ /$1 [R=301,L]
上記のうち、URL上で拡張子を非表示にするための
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php RewriteCond %{THE_REQUEST} \.(php|html)\ HTTP RewriteRule ^(.*)\.(php|html)$ /$1 [R=301,L]
部分を削除したところ、無事に動作するようになっています。
このコードはインターネットで調べたものをコピー&ペーストで使っています。
拡張子を非表示にしたまま、フォームでPOST引き渡しをすることは難しいのでしょうか?
恥ずかしながら、htaccessのことはほとんどわからず、
ネットで調べたものをコピー&ペーストするくらいしかできません。
サーバーはcoreserverを利用しています。
情報が不足していましたらご教示いただけますと幸いです。
よろしくお願いいたします。
まだ回答がついていません
会員登録して回答してみよう