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


How to pass post data after url rewrite in .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 数据都将丢失。

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

开机自检:阵列print_r:阵列 ( )GET:数组print_r:数组 ( )

我应该对我的 .htaccess 文件执行什么操作以继续将所有请求重定向到索引.php同时保留所有帖子数据?

提前谢谢你!

附言如果我在具有web.config重写规则的Windows服务器中设置它,我的网站可以正常工作。

更新 #1

从Firefox Live HTTP标头中,我看到了一个重大问题:仅在Apache中捕获301永久移动标头(这在IIS中不会发生)

HTTP/1.1 301 永久移动日期:2014 年 4 月 6 日星期日 13:48:06 GMT服务器:阿帕奇位置: http://mydomain.gr/projects/testsite/admin/articles/6/save变化:接受编码内容编码:gzip内容长度:270保持活动状态:超时=3,最大值=100连接:保持活动状态

内容类型:text/html;charset=iso-8859-1

更新 #2

似乎与这个问题有一定的关系:

如何在.htaccess重定向后通过ajax请求保留POST数据?

询问者发现有人在 .htaccess 文件顶部为每个请求强制使用 301 重定向规则。

是托管服务提供商的罪魁祸首吗?

这很令人困惑,希望我能从同样的头痛中拯救某人:

问题位于 Parallels Panel>Websites & Domains>mydomain.gr> Hosting Settings

找到选择字段:

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

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

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

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