.htaccessにmodrewriteを追加しましたが、すべてのフォームが投稿データをphpスクリプトに送信しません。
コード:例:私の.htaccessは.php拡張子を削除し、ディレクトリの場合は末尾のスラッシュを削除します。
RewriteEngine On
# Redirect index to site root
RewriteCond %{HTTP_HOST} ^mysite.com [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,NC]
RewriteRule ^index.php$ http://www.mysite.com/ [R=301,L]
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://www.mysite.com/$1 [QSA,R=301,L]
# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [QSA,L]
modrewriteルールに例外を追加して、特定のファイル/ディレクトリが無視されるようにする方法はありますか?では、form-process.php、email-process.php、upload-process.php、save-process.phpと呼ばれるすべてのファイルを無視できますか?
編集:クエリに!POSTを追加できることを読んでいます。このように追加すると、うまくいくでしょうか?
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ !POST
RewriteRule ^(.+)\.php$ http://www.mysite.com/$1 [R=301,L]
# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f !POST
RewriteRule ^([^/.]+)$ $1.php [L]
編集:上記のルールにも[QSA]を追加しましたが、それでも変数がフォームに渡されません
編集:この問題に悩まされている他の人のために、データを投稿したファイルを選択し、.htaccessファイルへの変更からそれらを削除することで問題を修正しました。理想的ではありませんが、今のところは機能します。
# ignore recipes page
RewriteRule ^directorytoremove - [L,NC]
RewriteRule ^filenametoremove - [L,NC]
QSAを追加しても、リダイレクト301はPOSTを介してデータを渡しません。したがって、ポストリダイレクトを実行する必要があります。たとえば、フォームがデータをPOSTSし、リダイレクトされ、受信ファイルがデータを取得して処理します。同じ問題が発生する場合は、上記のコードを.htaccessファイルの先頭のRewriteEngineOnステートメントの下に貼り付けてください。
同じ問題を抱えている人の助けになることを願っています!