【问题标题】:Regexp / htaccess rewrite fun正则表达式/htaccess 重写乐趣
【发布时间】:2011-08-16 18:10:36
【问题描述】:

我有一长串来自旧站点结构的 URL,我需要使用 RedirectMatch 将它们重定向到同一域上的新 URL。诀窍是旧的(源)URL 包含一堆混乱的变量。这不是问题,对吧?我只是放置了一些可爱的小 Regexp 语句来处理这些变量。这就是我所做的,它正确匹配变量。甜!

问题出在 RedirectMatch 语句的第二部分 - 目的地。 RedirectMatch 将旧 URL 正确解析为新 URL,但旧变量附加到新 URL。我想保留重定向,但目标 URL 不包含变量。这是我的代码:

RedirectMatch 301 ^/Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html

实际重定向网址:

http://www.website.com/garage.html?launch_pg=itemZoomView&launch_sel=1009152&launch_pg_sp=true&title=Pig+Waste+Can

谁能指出我在这里做错了什么?我只是想摆脱那些糟糕的旧变量并重新开始。

【问题讨论】:

    标签: regex .htaccess url-rewriting


    【解决方案1】:

    如果“变量”是指查询字符串(目标 URL 示例的 launch_pg=itemZoomView&launch_sel=1009152&launch_pg_sp=true&title=Pig+Waste+Can 部分),则使用此重定向规则:

    RedirectMatch 301 ^/Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html?
    

    唯一的区别——新网址末尾的?。这会阻止旧的查询字符串被复制,因为我们告诉 Apache 新 URL 将有这个 empty 查询字符串。


    如果你可以使用 mod_rewrite,规则如下:

    # Activate Rewrite Engine
    Options +FollowSymLinks
    RewriteEngine On
    
    # the rewrite rule
    RewriteRule ^Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html? [R=301,L]
    

    这肯定会使用空查询字符串重定向。

    【讨论】:

    • 是的,实际上我在这篇文章之后的持续研究中发现了这一点,并试了一下。结果是多余的“?”只是追加到变量的开头,如:website.com/…
    • @Tela -- 我不知道你做了什么 -- 但这不应该那样工作。我提供的代码 100% 有效——我运行的网站很少使用类似代码,在 Apache 2.2.17 上没有问题。
    • @Tela 我添加了 mod_rewrite 驱动的重定向规则,它做同样的工作。
    • 我同意,这种行为不是我所期望的。我实际上已经创建了与您在上面相同的 RewriteRule,但这也不起作用。我也将 RewriteRule 移到 htaccess 中,因为我的网站使用 Magento 并且包括一些排除项,例如!l、!d、!f。不走运 - 它仍然是 404。
    • @Tela 请出示您的完整 htaccess(更新您的问题)。规则本身 100% 有效(我在这个网站上的几乎所有代表都来自回答这类问题)。
    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多