我已将博客更改为子域名。
即。 www.domain.com/blog - > blog.domain.com
简单规则修复了此路径和所有路径:
1 RewriteCond %{HTTP_HOST} !^blog\.camcloud\.com$ [NC]
2 RewriteRule ^blog$ https://blog.camcloud.com [L,R=301]
3 RewriteRule ^blog/(.*)$ https://blog.camcloud.com/$1 [L,R=301]
这将适当地移动所有相应的路径。虽然第一个问题是我将第2行和第3行合并为1条规则吗?我发现只输入www.domain.com/blog不会重定向到blog.domain.com。
我的另一个问题是我以这种方式明确地重定向了其他路径:
Redirect 301 /blog/tags/tag/foo https://blog.domain.com/tag/foo
基本上我正在移除“标签”并保留路径的其余部分(当然,在更改域时)。但这不起作用,因为它留下了“标签”:
我猜是因为之前的规则?另一条道路也是如此:
Redirect 301 /blog/categories/industry https://blog.domain.com/category/news/industry-news
只有少数这些并且路径完全不同所以我认为简单的重定向可以工作,但它仍然在网址中保留“类别”。所以它被重定向为:
答案 0 :(得分:1)
您正在混合来自两个不同模块mod_rewrite
(RewriteRule
)和mod_alias
(Redirect
)的规则。最好使用mod_alias
来保留所有规则:
RewriteEngine On
# specific redirects first
RewriteRule ^blog/categories/industry/?$ https://blog.domain.com/category/news/industry-news [L,NC,R=301]
RewriteRule ^blog/tags/(tag/foo/?)$ https://blog.domain.com/$1 [L,NC,R=301]
# now catch-all rule to redirect everything from /blog to new sub-domain
RewriteRule ^blog(/.*)?$ https://blog.camcloud.com$1 [L,R=301,NC]
/blog/
目录没有.htaccess