要求
旧域: abc.com
新域: def.com
我希望abc.com/loadsite.action?site=eu的请求被重定向到def.com/eu,但同时,我想确保如果新域名出了问题,用户仍然可以通过某种方式使用旧域(可能通过在URL中添加/old,able .com/ old /loadsite.com?site=eu)。
目前,我的vhost配置如下所示。它为选定的市场重定向到def.com,但没有后备配置。
Listen 12567 NameVirtualHost *:12567
ServerName abc.com ProxyPreserveHost On
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)site=(eu) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)site=(in) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)site=(jp) [NC]
RewriteRule ^/?loadsite$ http://def.com/%1? [R=301,L,NC]如何在不进入循环的情况下将abc.com/old/loadsite.action?site=eu重定向到abc.com/loadsite.action?site=eu?
这里的任何线索都是非常感谢的。
发布于 2018-01-23 08:33:14
像这样的事情应该有效:
RewriteCond %{THE_REQUEST} !\s/old/
RewriteCond %{QUERY_STRING} (?:^|&)site=(eu) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)site=(in) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)site=(jp) [NC]
RewriteRule ^/?loadsite$ http://def.com/%1? [R=301,L,NC]
RewriteRule ^/?old/(.*) /$1 [L,NC]最后一个指令将简单地(内部)将abc.com/old/loadsite.action?site=eu重写为abc.com/loadsite.action?site=eu。由于%{THE_REQUEST}包含浏览器发送到服务器的完整HTTP请求行,即使在此内部重写之后,我们仍然可以使用该变量来防止对新站点的重写。
因此,RewriteCond %{THE_REQUEST} !\s/old/添加了另一个条件:如果原始请求以/old/开头,则不要重写新站点。
https://stackoverflow.com/questions/48396453
复制相似问题