后备 - 使用apache vhost配置重定向到新域

时间:2017-11-29 09:13:50

标签: apache mod-rewrite httpd.conf vhosts

这是关于https://stackoverflow.com/posts/47547418

的后续问题

我想要来自

的请求

somedomain.com/loadproduct?product=dell-inspiron-15

有选择地重定向到

someotherdomain.com/dell-inspiron-15

但与此同时,我想确保新域名出现问题,用户仍然可以通过在网址中添加/ old来使用旧域名。

例如,如果用户使用

somedomain.com/old/loadproduct?product=dell-inspiron-15

然后不应将其重定向到 someotherdomain ,而应通过有效的网址 somedomain.com/loadproduct?product=dell-inspiron-15

但如果他们使用

somedomain.com/loadproduct?product=dell-inspiron-15

应该重定向它们。

目前我的vhost配置如下所示。它会重定向到所选产品的某个其他域,但没有后备配置。

Listen 12567
NameVirtualHost *:12567

<VirtualHost *:12567>
    ServerName somedomain.com
    ProxyPreserveHost On

    RewriteEngine On
    RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-15) [NC,OR]
    RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-16) [NC,OR]
    RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-17) [NC]
    RewriteRule ^/?loadproduct$ http://someotherdomain.com/%1? [R=301,L,NC]
</VirtualHost>

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

1 个答案:

答案 0 :(得分:0)

修改你的RewriteCond条件,并在路径(URI)中添加一个不接受/ old /的条件。所以:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*/old/.*$ [NC]
RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-15) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-16) [NC,OR]
RewriteCond %{QUERY_STRING} (?:^|&)product=(Dell-Inspiron-17) [NC]
RewriteRule ^/?loadproduct$ http://someotherdomain.com/%1? [R=301,L,NC]

在第一行中,不需要指定[AND],因为它是隐式的。 !字符否定了匹配。

免责声明:我没有在真正的Apache上测试过这个,但我很确定它没问题。