我在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正确重定向。
答案 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]