重定向到子域并更改不同的路径

时间:2015-09-25 14:25:29

标签: regex apache .htaccess mod-rewrite

我已将博客更改为子域名。

即。 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

基本上我正在移除“标签”并保留路径的其余部分(当然,在更改域时)。但这不起作用,因为它留下了“标签”:

  

https://blog.domain.com/tags/tag/foo

我猜是因为之前的规则?另一条道路也是如此:

Redirect 301 /blog/categories/industry https://blog.domain.com/category/news/industry-news

只有少数这些并且路径完全不同所以我认为简单的重定向可以工作,但它仍然在网址中保留“类别”。所以它被重定向为:

  

https://blog.domain.com/categories/industry

1 个答案:

答案 0 :(得分:1)

您正在混合来自两个不同模块mod_rewriteRewriteRule)和mod_aliasRedirect)的规则。最好使用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
  • 确保在测试之前清除浏览器缓存