我有两个独立的虚拟主机。在www。一,我已经在.htaccess
上设置了这一行redirectMatch 301 ^(.*)$ http://d_blur_blur_s.com$1
除了在POST转换为GET的情况下,所有工作都按预期工作 请注意帖子有参数作为get(我没有这样做,我不会改变它)我只是想避免重复的内容。我正在展示萤火虫的痕迹。
我希望通过redirectmatch或其他技巧在主域上重定向POST。
更新
我有一半的内部链接在网站上用www写,另一半没有它。所以我需要保持公开但不重复。我需要将GET转发为GET并将POST作为POST发送。问题很大,我有12000页索引,并有很多表格。所以我首先在不改变代码的情况下搜索通用解决方案。我完全控制服务器。
非常感谢
答案 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)