【问题标题】:Exclude a URL from folder redirection从文件夹重定向中排除 URL
【发布时间】:2017-10-10 21:55:33
【问题描述】:

我正在将所有 URL 从 www.example.com/forums 重定向到 www.example.com/blog/

所以我在.htaccess中制定了这条规则:

RewriteRule ^forums blog/$1 [L,R=301]

问题是我想排除一些也以 forums/ 开头的 URL,并将它们重定向到 /blog 以外的特定 URL。

例如,forums/8/some-made-up-word-here-1681/studies/some-made-up-studies

现在,它重定向到 /blog,就像所有以 forum/ 开头的 URL 一样

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    您只需要在更一般的规则之前先包含更具体的重定向。例如:

    RewriteEngine On
    
    # Specific redirects
    RewriteRule ^forums/8/some-made-up-word-here-1681 /studies/some-made-up-studies [R,L]
    
    # Redirect all other URLs that start /forums
    RewriteRule ^forums/?(.*) /blog/$1 [R,L]
    

    我还修改了您现有的指令,将/forums/<something> 重定向到/blog/<something>,我认为这可能是最初的意图,因为您在替换中使用了$1 反向引用,但在RewriteRule pattern 中没有捕获组。您的原始指令会将/forums/<something> 重定向到/blog/

    我还在 替换 上添加了一个斜杠前缀。这是重定向所必需的,尽管您可能已经设置了 RewriteBase,在这种情况下您不需要这样做。

    您需要在测试前清除浏览器缓存,因为较早的 catch-all 301 将被浏览器硬缓存。出于这个原因,使用临时 302 进行测试通常更容易,以避免缓存问题。只有在您确认按预期工作后,才能将上述临时重定向更改为 301。

    更新:要将所有以 /forums 开头的 URL 重定向到 /blog/,而不复制 URL 的其余部分,然后将最后一个指令更改为:

    # Redirect all other URLs that start /forums
    RewriteRule ^forums /blog/ [R,L]
    

    基本上,原始指令中的$1 是多余的。

    【讨论】:

    • 谢谢,在我尝试你的代码之前,我想提一下,我还将 /forums 重定向到 /blog/...不只是 /forums/ 并遵循它
    • 是的,没关系,模式^forums/?(.*) 也将匹配/forums? 使前面的斜杠成为可选的。
    • 对不起,但我需要所有遵循 forums/ 的 URL 仅重定向到 /blog/(没有尾随),除了我提到的那个。现在使用您的代码,/forums 后面的任何内容都会带来 404 页面,因为它会转发到 /blog/same-following-content/
    • 嗨 MrWhite,这个解决方案中的代码在我尝试时有效,但现在它不再适用于我......也许我很快就判断它正在工作......不确定.有什么方法可以联系您并提供代码和实际 URL,以便您帮助我吗?
    • .htaccess 文件的内容添加到您的问题中(假设您的文件系统根目录中只有一个.htaccess 文件)。说明请求的 URL 和期望的结果。最可能的原因是与另一个指令冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2012-09-15
    相关资源
    最近更新 更多