【问题标题】:mod_rewrite for a 301 redirect. Not redirecting to proper locationmod_rewrite 用于 301 重定向。没有重定向到正确的位置
【发布时间】:2013-08-11 14:55:27
【问题描述】:

我正在尝试使用 RewriteRule(使用 ISAPI,而不是在 Apache 服务器上)来 301 重定向 url,例如:

http://www.mydomain.com/news/story-title/

http://www.mydomain.com/news/detail/story-title/

到目前为止我得到的是:

RewriteRule ^news/(?!detail)/?$ news/detail/$1/ [L,R=301]

它成功忽略了其中已经包含“详细信息”的网址(在我的一些第一次尝试中,我最终得到了一个循环和一个类似“/news/detail/detail/detail ...”的网址),但是访问/news/story-title/ 给了我一个 404,所以它没有重定向到正确的位置。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    将重写规则更改为

    RewriteRule ^news/(?!detail)([^/]+)/?$ news/detail/$1/ [L,R=301]
    

    编辑:(它是如何工作的?)

    /(?!detail) 是一个负前瞻,但它也是非捕获的,即它匹配/,但不匹配它之后的内容;只是确保它不是“细节”。所以,我添加了一个捕获组([^/]+) 来捕获这些字符(一个或多个+,任何不是/)可选地以/ 结尾。

    因此,$1 现在被替换为匹配的目录名称。

    【讨论】:

    • 您的解决方案效果很好。谢谢你。您是否介意分解您的模式中的每个片段的作用以帮助我更好地理解它?
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2013-01-05
    • 2018-12-07
    • 2013-05-25
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多