.htaccess modrewrite破坏了我的形式

时间:2012-09-19 09:47:03

标签: php html .htaccess mod-rewrite

我已经为我的.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例如你的表单POSTS数据,重定向和接收文件GETS数据并处理它。如果您遇到同样的问题,请将上面的代码粘贴到开头的RewriteEngine On语句下面的.htaccess文件的顶部。

希望能帮助任何有同样问题的人!

2 个答案:

答案 0 :(得分:2)

您可以在开头(RewriteEngine on

之后添加这样的规则
RewriteRule ^(form|email|upload|save)-process\.php$ - [L]

答案 1 :(得分:0)

试试这个:

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/.]+)$ $1.php [QSA,L]