【问题标题】:mod_rewrite - redirecting to different protocol, domain & changed query stringsmod_rewrite - 重定向到不同的协议、域和更改的查询字符串
【发布时间】:2017-09-25 23:51:07
【问题描述】:

我正在重定向一个 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”参数和连字符作为新 URL 中“title”参数的前缀。

我认为这是可能的,但我不知道怎么做?如果不是,我将接受没有 cat 参数的规则:

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

我想使用 or 表达式来匹配“猫”: (cat1|cat2|cat3)

【问题讨论】:

  • 您有两个网址列为“旧”输入。其中哪一个应该转换为新格式?两个?

标签: regex apache .htaccess redirect mod-rewrite


【解决方案1】:

对于第一种 URL,您可以这样做:

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]

对于第二个 URL,您可以这样做:

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

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

对于第一种 URL,您可以这样做:

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]

对于第二个 URL,您可以这样做:

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

【讨论】:

    猜你喜欢
    • 2014-04-13
    • 2014-01-08
    • 1970-01-01
    • 2012-10-02
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多