我已经为我的.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文件的顶部。
希望能帮助任何有同样问题的人!
答案 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]