旧域名:abc.com
新域名:def.com
我希望 abc.com/loadsite.action?site=eu 的请求重定向到 def.com/eu ,但与此同时,我想要为了确保新域名出现问题,用户仍然可以通过某种方式使用旧域名(可能通过在URL中添加/ old,abc.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 ?
这里的任何线索都非常感激。
答案 0 :(得分:1)
这样的事情应该有效:
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/
开头,则不要重写到新网站。