ホームページでフォーム作成をしています。
テストサーバーで作ったフォームがうまく動いたため、本サーバーに移して確認をしたところ、まったくフォームがデータをPHPに渡さなくなってしまいました。
切り分けのために、非常に簡単なプログラムを書いて実行したところ、やはりデータが渡されません。
test.php
1<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<title>フォーム</title> 6</head> 7<body> 8<form action="test2.php" method="post"> 9<input type="text" name="name" id="name"> 10<input type="submit"> 11</form> 12</body> 13</html>
test2.php
1<?php 2$msg = $_POST['name']; 3?> 4<!doctype html> 5<html> 6<head> 7<meta charset="utf-8"> 8<title>結果</title> 9</head> 10<body> 11結果<?php echo $msg; ?> 12</body> 13</html>
結果、test2.phpに遷移した後、画面には「結果」という文字だけが表示されました。
試しに、test.phpのメソッドを method="get"に変えて、test2.phpにて$_GET['name'];にしたところ、正常にデータが引き渡されて、表示されました。
本サーバーには、ルートに.htaccessが設置してあるので、それが原因かと思い、サーバー上から一時的に削除してみたところ、POSTでもデータが引き渡され、本番用のフォームも正常に動作しました。
もともとの.htaccessの中身は以下の通りです
htaccess
1RewriteEngine On 2RewriteCond %{HTTP_HOST} ^www\.t-hoso\.net$ 3RewriteRule ^(.*)$ https://t-hoso.net/$1 [R=301,L] 4 5ErrorDocument 404 /404.html 6 7RewriteEngine on 8RewriteCond %{REQUEST_FILENAME} !-d 9RewriteCond %{REQUEST_FILENAME}\.html -f 10RewriteRule ^(.*)$ $1.html 11 12RewriteCond %{REQUEST_FILENAME} !-d 13RewriteCond %{REQUEST_FILENAME}\.php -f 14RewriteRule ^(.*)$ $1.php 15 16RewriteCond %{THE_REQUEST} \.(php|html)\ HTTP 17RewriteRule ^(.*)\.(php|html)$ /$1 [R=301,L] 18
上記のうち、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を利用しています。
情報が不足していましたらご教示いただけますと幸いです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー