我在 .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 传递任何数据。所以你需要做一个post-redirect-get,例如你的表单发布数据,被重定向,接收文件获取数据并处理它。如果您遇到同样的问题,请将上面的代码粘贴到您的 .htaccess 文件顶部,并在打开的 RewriteEngine On 语句下方。
希望对遇到同样问题的人有所帮助!