Apache 301重定向从一个域到另一个域

Apache 301重定向从一个域到另一个域

我正在尝试在我的网站的 VirtualHost 配置中设置重定向。到目前为止,我能够将非 www 流量重定向到 www 地址,如下所示:

<VirtualHost: *:80>
    ServerAlias www.gcbeauce.com
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^guidedescommercesdebeauce\.com$ [NC]
    RewriteRule ^(.*)$ http://www.guidedescommercesdebeauce.com$1 [R=301,L]

但我还想将旧域名重定向到这个新域名。我尝试添加:

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

但什么也没有发生。

我这里遗漏了什么吗?

答案1

您需要否定该匹配。尝试以下操作:

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

请注意 中的感叹号RewriteCond。还请注意,这将强制使用单个规范域名。我假设这是您想要的。如果不是,那么您必须枚举要重定向的域名。在这种情况下,请务必将其添加到[OR]的末尾RewriteCond

我还添加了[QSA]您的标志。这样,任何可能存在的查询字符串都将被保留。

最后,你强烈敦促仔细阅读 mod_rewrite 文档,因为它对这个问题和许多其他问题都有答案。

答案2

$1 之前少了一个斜线?

RewriteEngine On
RewriteRule ^(.*)$ http://www.new-domain.com/$1 [R=301,L]

答案3

如果您使用的是 Apache 2.4,则无需启用重写 Apache 模块,您可以使用以下命令:

# old-domain.com to new-domain.com
<If "%{HTTP_HOST} = 'old-domain.com'">
  Redirect 301 "/" "http://new-domain.com/"
</If>

相关内容