.htaccess RewriteRule被忽略,可以使用第二组眼睛

时间:2014-01-31 02:25:07

标签: .htaccess mod-rewrite

我在htaccess文件中遗漏了一些东西,我需要第二眼。

以下是我想要发生的事情:

blog.mysite.com -> www.mysite/about/blog
blog.mysite.com/post/1231231/article-title -> www.mysite.com/article-title

这就是我所拥有的:

RewriteCond %{HTTP_HOST} ^blog\.mysite\.com
RewriteRule (.*) http://www.mysite.com/about/blog/$1 [R=301,L]
RewriteRule ^post/1231231/article-title http://www.mysite.com/article-title  [R=301,L]

这是我得到的:

blog.mysite.com/post/1231231/article-title -> www.mysite.com/about/blog/post/1231231/article-title

我的想法是第一个重写规则正在执行,而后续的规则没有被查看。不知道我在忽视...... :)。

EDIT :: FIle现在看起来像:

RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule ^post/1231231/article-title1 http://www.mysite.com/article-title1  [R=301,L]
RewriteRule ^post/1231232/article-title2 http://www.mysite.com/article-title2  [R=301,L]
RewriteRule ^post/1231233/article-title3 http://www.mysite.com/article-title3  [R=301,L]

RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com/about/blog/$1 [R=301,L]

只有article-title1正确重定向。

1 个答案:

答案 0 :(得分:0)

您的第二次重定向会被第一条规则吞噬,因为(.*)会匹配所有内容,包括post/1231231/article-title。因此,您需要重新排列顺序以及重复重写条件。 RewriteCond指令仅适用于紧随其后的RewriteRule,因此遵循该规则的任何规则都不会应用任何条件。

RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule ^post/1231231/article-title http://www.mysite.com/article-title  [R=301,L]

RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com/about/blog/$1 [R=301,L]

如果您将/post/123/title更改为:

,则可以使RewriteRule更加通用化
RewriteRule ^post/[0-9]+/(.+)$ http://www.mysite.com/$1  [R=301,L]