0

我目前正在使用:

RedirectMatch 301 http://blog.domain.com/(.*) /blog/article/$1

将旧链接如:blog.domain.com/article-title 重定向到 www.domain.com/blog/article/article-title

但是,当我只是访问 blog.domain.com 时,它会将我带到 www.domain.com/blog/article。

这是一个意想不到的副作用。我希望 blog.domain.com/ 本身简单地重定向到 www.domain.com/blog 但其中的内容如上所述重定向(效果很好。)

任何帮助将不胜感激!

4

1 回答 1

1

/(.*)将匹配后跟零个或多个字符的斜线,这意味着http://blog.example.com/将匹配并由该规则处理。将其更改为/(.+)仅匹配一个斜杠后跟一个或多个字符,这应该会停止根重定向。像这样的东西怎么样:

Redirect 301 / http://www.example.com/blog
RedirectMatch 301 /(.+) http://www.example.com/blog/article/$1

如果将 blog.example.com 放在虚拟主机中,这将起作用,假设 [www.]example.com 位于单独的虚拟主机中。如果您从单个虚拟主机中处理它们,这将无休止地重定向到自身。我知道在一个 vhost 中处理它的唯一方法是使用 mod_rewrite。像这样的东西,也许:

RewriteEngine On

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

RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com$ [NC]
RewriteRule ^(.+)$ http://www.example.com/blog/article/$1 [R=301,L]
于 2012-06-24T23:56:10.383 回答