我正在尝试在我的网站的 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>