mod_rewrite用于301重定向。没有重定向到正确的位置

时间:2013-08-09 15:47:19

标签: .htaccess mod-rewrite

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

  

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,所以它不会重定向到正确的位置。

1 个答案:

答案 0 :(得分:1)

将重写规则更改为

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

编辑 :(工作原理如何?)

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

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