【问题标题】:How to Redirect Subdomains to Other Domain如何将子域重定向到其他域
【发布时间】:2010-06-03 23:48:22
【问题描述】:

我想用 htaccess mod-rewrite 完成什么:

使用重写规则将所有子域重定向到新域名。

例如

test1.olddomain.com ===> test1.newdomain.com

test2.olddomain.com ===> test2.newdomain.com

test3.olddomain.com ===> test3.newdomain.com

这是我目前所拥有的,当然这是错误的:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$ [NC]
RewriteRule ^(.*) http://www.newdomain.com/$1 [R=301,L]

RewriteRule [a-zA-Z]+\.olddomain.com$ http://$1.newdomain.com/ [R=301,L]

由于我还不是正则表达式迷,我需要您的帮助...感谢您在此处提供的任何帮助。我也知道我们可以将前两个条件合二为一。

注意:我不使用 DNS 重定向所有域的原因是很多目录需要特殊的重写规则才能保持在 SEO 上的位置。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    在 .htaccess 文件中,RewriteRules 匹配的“URL”已被去除域名和任何指向当前目录的目录。 (在 .htaccess 文件中使用 mod_rewrite 是一个巨大的痛苦;如果您可以访问服务器 conf,请改为在那里!)

    因此,假设您的 .htaccess 在 DocumentRoot 中,请尝试以下操作:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(.*)olddomain\.com$ [NC]
    RewriteRule ^(.*)$ http://%1newdomain.com/$1 [R=301,L]
    

    %1 应该与 RewriteCond 中的第一组匹配,而 $1 应该与 URL 部分匹配。

    【讨论】:

    • 我很震惊,可能是我第一次在没有测试的情况下首次尝试正确的 mod_rewrite!
    【解决方案2】:
    RewriteRule ^(.+)\.olddomain\.com$ http://$1.newdomain.com/ [R=301,L]
    

    您需要在开头指定 ^ 以要求正则表达式引擎匹配从那里开始的行。接下来,匹配“.olddomain.com”之前的任何内容,并将其分配给第一个匹配的模式(稍后将在 $1 中访问)。您需要用括号 (.+) 括起来,以便将匹配项分配给 $1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 2019-02-16
      • 2022-07-07
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多