回退 - 使用 apache vhost 配置重定向到新域

Posted

技术标签:

【中文标题】回退 - 使用 apache vhost 配置重定向到新域【英文标题】:Fallback - redirect to a new domain using apache vhost configuration 【发布时间】:2018-05-12 22:30:11 【问题描述】:

这是https://***.com/posts/47547418的后续问题

我想要来自

的请求

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

被选择性地重定向到

someotherdomain.com/dell-inspiron-15

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

例如,如果用户使用

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

那么它们不应被重定向到 someotherdomain,而应通过有效的 url somedomain.com/loadproduct?product=dell-inspiron-15 提供服务

但如果他们使用

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

它们应该被重定向。

目前我的虚拟主机配置如下所示。它为选定的产品重定向到其他域,但没有后备配置。

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】:

修改您的 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 上测试过这个,但我很确定它没问题。

【讨论】:

但是 /old 不是一个有效的 url,它应该重定向到一个没有 /old 的 url 在你的问题中你说如果/old/ 存在,不要重定向。所以我添加的行是确保 RewriteRule 不应用于包含/old/ 的请求。我误解了这个问题还是? 我试着改变一下问题语言,你现在可以检查一下吗? 其实我的意思是在 url 中使用 old 作为后备标记。 我添加了 RewriteCond %QUERY_STRING (?:^|&)product=(ENGY) [NC,OR] 所以正如预期的那样 "?loadproduct=ENGY" => 应该被重定向,但我可以看到带有“?loadproduct=ENGYHyd”的网址也被重定向。知道为什么吗?是在做前缀匹配吗?

以上是关于回退 - 使用 apache vhost 配置重定向到新域的主要内容,如果未能解决你的问题,请参考以下文章

apache 基本vhost配置 目的及过程

怎样配置apache的vhosts文件

怎样在windows下配置apache vhost

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

[Apache系列]怎样在windows下配置apache vhost

使用 apache vhost 配置有选择地重定向到新域