首先,这是我的.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不起作用。答案 0 :(得分:2)
您正在强制进行客户端重定向,这意味着浏览器将通过GET请求指定的新页面 - 这就是您的表单数据丢失的位置。 POST数据不会通过重定向保留,因为新页面未通过POST加载。