mod_rewrite - 重定向到不同的协议,域和&更改查询字符串

时间:2017-09-25 23:51:07

标签: regex apache .htaccess redirect mod-rewrite

我正在重定向http www。新的非www的URL。域名在https,但是一个特定的URL模式在结构上已经改变,所以我想在htaccess中使用重写规则。

旧:

http://www.example.com/travel.php?cat=cat1&id=1&title=title-string
http://www.example.com/travel/cat1/1/title-string

新:

https://newdomain.com/travel/cat1-title-string

因此,对于重定向,“id”参数完全消失,但我希望“cat”参数和连字符在新网址中为“title”参数添加前缀。

我认为这是可能的,但我无法弄清楚如何?如果不是,我会满足于没有cat参数的规则:

https://newdomain.com/travel/title-string

我想使用或表达式来匹配“cat”: (CAT1 | CAT2 | CAT3)

1 个答案:

答案 0 :(得分:1)

对于第一种网址,您可以执行此操作:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} ^cat=([^&]*)&id=[^&]*&title=(.*)?$ [NC]
RewriteRule ^travel\.php$ https://newdomain.com/travel/%1-%2? [R=301,L]

对于第二个网址,您可以执行此操作:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} ^\/travel\/([^\/]*)\/[^\/]*\/(.*)?$ [NC]
RewriteRule ^(.*)$ https://newdomain.com/travel/%1-%2 [R=301,L]

如果cat1只适用于某些特殊值,我们必须重新定义:

对于第一种网址,您可以执行此操作:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} ^cat=(cat1|cat2|cat3)&id=[^&]*&title=(.*)?$ [NC]
RewriteRule ^travel\.php$ https://newdomain.com/travel/%1-%2? [R=301,L]

对于第二个网址,您可以执行此操作:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} ^\/travel\/(cat1|cat2|cat3)\/[^\/]*\/(.*)?$ [NC]
RewriteRule ^(.*)$ https://newdomain.com/travel/%1-%2 [R=301,L]

cat1 | cat2 | cat3 替换为您的值