如何在.htaccess中重写url后传递post数据

时间:2014-04-06 13:04:36

标签: php apache .htaccess

我在位于/ projects / testsite

中的htaccess文件中使用以下代码
AddType x-mapp-php5 .php
RewriteEngine On
RewriteBase /
Options -MultiViews 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . projects/testsite/index.php [L,QSA]

#ErrorDocument 404 /404.php

当我在http://www.mydomain.com/projects/testsite/admin/articles/1/edit时 然后按保存,将请求重定向到http://www.mydomain.com/projects/testsite/admin/articles/1/save

所有帖子数据都会丢失。

如果我尝试调试,我得到的是

POST:Array print_r:Array() GET:Array print_r:Array()

我应该如何处理我的.htaccess文件,以便将所有请求重定向到index.php,但保留所有帖子数据?

提前谢谢!

P.S。如果我使用web.config重写规则在Windows服务器中设置它,我的网站将正常工作。

更新#1

从Firefox Live HTTP标题我看到一个重大问题:仅在Apache中捕获301 Moved Permanently标头(这在IIS中不会发生)

HTTP / 1.1 301永久移动 日期:太阳,2014年4月6日13:48:06 GMT 服务器:Apache 地点:http://mydomain.gr/projects/testsite/admin/articles/6/save 变化:接受编码 内容编码:gzip 内容长度:270 保持活跃:超时= 3,最大= 100 连接:Keep-Alive

Content-Type:text / html;字符集= ISO-8859-1

更新#2

似乎与此问题存在某种关系:

How to preserve POST data via ajax request after a .htaccess redirect?

提问者发现有人在.htaccess文件的顶部为每个请求强制执行301重定向规则。

归咎于托管服务提供商吗?

1 个答案:

答案 0 :(得分:1)

这令人感到莫名其妙,希望我从同样的头痛中拯救了某人:

问题出在Parallels Panel>网站&域和GT; mydomain.gr>托管设置

找到选择字段:

首选域名,它被设置为domain.tld,但我所有的请求都在www.domain.tld,所以301重定向(你丢失了所有帖子数据)是由并行而不是我的应用程序文件强制的。

请注意,Parallels中的标签警告:

无论访问者在浏览器中指定的域名(带有www前缀或没有域名),都会打开包含首选域名URL的页面。 HTTP 301代码用于这种重定向。 “无”值表示不执行重定向。

所以我的解决方案是将首选域更改为无。