0

首先,这是我的 .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 永久移动。我相当确定问题出在这一行:

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

但我不知道如何解决它。我想让 mod_rewrite 完全按照它在功能上所做的工作,但我需要解决这个问题。

谢谢您的帮助!

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

4

1 回答 1

2

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

于 2012-07-09T21:46:06.503 回答