3

我在 .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 语句下方。

希望对遇到同样问题的人有所帮助!

4

2 回答 2

2

您可以在开头添加这样的规则(就在 之后RewriteEngine on

RewriteRule ^(form|email|upload|save)-process\.php$ - [L]
于 2012-09-19T13:04:50.637 回答
0

尝试这个:

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/.]+)$ $1.php [QSA,L]
于 2012-09-19T09:48:39.087 回答