mod_rewrite导致$ _POST无法访问PHP

时间:2012-07-09 21:42:17

标签: php forms apache mod-rewrite

首先,这是我的.htaccess:

RewriteEngine On
Options FollowSymLinks

# check if url ends in a slash and if it does redirect to same url without one
RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(([^/]+/)*([^/.]+))/\ HTTP/
RewriteRule ^(([^/]+/)*([^/.]+))/$ http://localhost/example/$1 [R=301,L]

# extionless url rewrite for urls in form example.com/cmd
RewriteRule ^([^/.]+)$ index.php?cmd=$1 [L,QSA]

# extionless url rewrite for urls in form example.com/cmd/action
RewriteRule ^([^/]+)/([^/.]+)$ index.php?cmd=$1&action=$2 [L,QSA]

# extionless url rewrite for urls in form example.com/cmd/ajax
RewriteRule ^([^/]+)/([^/]+)/([^/.]+)$ index.php?cmd=$1&action=$2&ajax=$3 [L,QSA]

所以这适用于url重写很好。但是当我在向PHP提交表单后根据我的要求查看Firebug时,状态为303 Move Permanently。我很确定问题就在这一行:

RewriteRule ^(([^/]+/)*([^/.]+))/$ http://localhost/example/$1 [R=301,L]

但我不知道如何解决它。我希望保持mod_rewrite完全正确地执行功能,但我需要修复此问题。

感谢您的帮助!

编辑:我还想提一下,如果我使用jquery .ajax将数据从JavaScript发送到PHP并且要发布类型,它确实有效。而且,无论如何,$ _GET都可以工作。从HTML发送到PHP时只是$ _POST不起作用。

1 个答案:

答案 0 :(得分:2)

您正在强制进行客户端重定向,这意味着浏览器将通过GET请求指定的新页面 - 这就是您的表单数据丢失的位置。 POST数据不会通过重定向保留,因为新页面未通过POST加载。