redirectmatch更改post以获取

时间:2012-05-14 15:53:51

标签: .htaccess redirect

我有两个独立的虚拟主机。在www。一,我已经在.htaccess

上设置了这一行
redirectMatch 301 ^(.*)$ http://d_blur_blur_s.com$1

除了在POST转换为GET的情况下,所有工作都按预期工作 请注意帖子有参数作为get(我没有这样做,我不会改变它)我只是想避免重复的内容。我正在展示萤火虫的痕迹。

我希望通过redirectmatch或其他技巧在主域上重定向POST。

firebug trace

更新
我有一半的内部链接在网站上用www写,另一半没有它。所以我需要保持公开但不重复。我需要将GET转发为GET并将POST作为POST发送。问题很大,我有12000页索引,并有很多表格。所以我首先在不改变代码的情况下搜索通用解决方案。我完全控制服务器。

非常感谢

4 个答案:

答案 0 :(得分:6)

服务器对您提出的任何请求的重定向响应,无论是POST还是GET请求,都会导致客户端发出GET请求(除非您以某种方式使其不能自动跟踪重定向 - 有时我这样做有curl,但我不知道任何广泛使用的浏览器,这个功能很容易为用户提供)。客户端浏览器获取重定向提供的URL,并将其视为执行GET请求的URL。没有办法,POST数据被服务器丢弃,因为它是用于原始URL的服务器资源。

如果您在.htaccess之外重定向,请说在PHP文件中构建重定向响应,您唯一的选择是将POST参数转换为GET参数字符串并将其添加到您发送回的URL的末尾。客户端带有重定向响应。

我非常有信心无论是通过mod_rewrite模块使用redirect指令还是重写指令,都无法在.htaccess文件或httpd.conf文件中附加重定向的自动POST参数。

答案 1 :(得分:5)

您使用307而不是301重定向来保留发布数据,但是如果某些浏览器确定要发送发布数据,则会向用户显示一个对话框,所以不是真的很漂亮。

但我宁愿去解决根本问题。如果html表单引用了错误的域(例如<form action="www.d_blur_blur_s/public/main/loginGenerator.php" ...),那么将帖子发送到错误域的唯一方法就是。只需修复HTML。

不要担心重复的内容,因为搜索引擎永远不会发送后请求,​​只会获取。您当前的解决方案应该可以防止重复内容。

答案 2 :(得分:3)

重定向和保留POST数据的唯一方法(我知道)是将mod_rewrite与mod_proxy一起使用,然后在RewriteRule中使用P标志。

www主机上启用 mod_rewrite,mod_rewrite和.htaccess httpd.conf,然后将此代码放入.htaccess DOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^ http://d_blur_blur_s.com%{REQUEST_URI} [P]

答案 3 :(得分:0)

在HTTP 1.1中,statusCode(307)指示应使用相同的方法重复请求并发布数据。更改重定向类型以对其进行修复。 enter image description here