这是关于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>
这里的任何线索都非常感谢。
答案 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上测试过这个,但我很确定它没问题。