【问题标题】:htaccess - Redirect content inside subdomain, but not subdomainhtaccess - 重定向子域内的内容,但不是子域
【发布时间】:2012-06-26 06:39:31
【问题描述】:

我目前正在使用:

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 但其中的内容可以像上面那样重定向(效果很好。)

任何帮助将不胜感激!

【问题讨论】:

    标签: .htaccess redirect directory subdomain


    【解决方案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]
    

    【讨论】:

    • 很好,这有点帮助,但我仍然希望 blog.domain.com 重定向到 domain.com/blog
    • 如果您将上面的 sn-p 放在您博客子域的虚拟主机中,它应该这样做(除非我遗漏了什么)。
    • 谢谢!你的代码在我定制时有效,我没有看到你的编辑:) Redirect 301 http://blog.domain.com http://www.domain.com/blog RedirectMatch 301 http://blog.domain.com/(.+) http://www.domain.com/blog/article/$1
    • 太棒了!我没有意识到你可以像这样格式化Redirect 规则(the documentation 似乎暗示第一个 URL 必须以斜杠开头),但如果它有效,它就有效。
    • Arg,它不再工作了。 blog.domain.com/article-name 不会重定向到 domain.com/blog/article/article-name :( 有什么想法吗?当我使用您的示例中的斜杠时,我会得到一个重定向循环
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多