将旧网站迁移到新域

Migrating old website to a new domain

要求

旧域名:abc.com

新域名:def.com

我希望将来自 abc.com/loadsite.action?site=eu 的请求重定向到 def.com/eu 但与此同时,我想确保如果新域出现问题,用户仍然可以通过某种方式使用旧域(可能通过在 URL 中添加 /old,abc .com/old/loadsite.com?site=eu)。

目前我的虚拟主机配置如下所示。对于选定的市场,它重定向到 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 没有进入循环?

非常感谢这里的任何线索。

像这样的东西应该可以工作:

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/(.*) / [L,NC]

最后一条指令将简单地(在内部)将 abc.com/old/loadsite.action?site=eu 重写为 abc.com/loadsite.action?site=eu。由于 %{THE_REQUEST} 包含浏览器发送到服务器的完整 HTTP 请求行,即使在这个内部重写之后我们仍然可以使用这个变量来防止重写到新站点。

因此,RewriteCond %{THE_REQUEST} !\s/old/ 又增加了一个条件:如果原始请求以 /old/ 开头,则不要重写到新站点。