将旧网站迁移到新域

时间:2018-01-23 07:39:01

标签: apache .htaccess mod-rewrite httpd.conf

要求

旧域名: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

这里的任何线索都非常感激。

1 个答案:

答案 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/开头,则不要重写到新网站。