我正在重定向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)
答案 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 替换为您的值