301 不带 www 的重定向域有效,但带 www 无效

Posted

技术标签:

【中文标题】301 不带 www 的重定向域有效,但带 www 无效【英文标题】:301 Redirect domain without www works, but with www does not 【发布时间】:2019-08-26 14:35:42 【问题描述】:

目前我正在处理将域 A 重定向到域 B 并将域 A 中的特定页面重定向到域 B 的请求。这是伪代码中的期望:

foo.com =====> https://www.bar.com
foo.com/foo =====> https://www.bar.com/bar

和:

www.foo.com =====> https://www.bar.com
www.foo.com/foo =====> https://www.bar.com/bar

但是,只有非 www 重定向按预期工作,而 www 重定向根本不起作用。本质上,上面的第一组重定向有效,而第二组无效。

这是我的 Vhost 文件:

<VirtualHost *:80>
  ServerName foo.com
    ServerAlias www.foo.com
    ErrorLog /etc/httpd/logs/foo.com-error.log
  Include /etc/httpd/conf.d/rewrite_rules/foo.com.rewrite
</VirtualHost>

我的重写规则:

RewriteEngine On
RewriteRule ^/foo$  https://www.bar.com/bar  [R=301,L,NC]
RewriteRule (.*) https://www.bar.com  [R=301,L,NC]

奇怪的是,当我在测试服务器上使用 curl 进行测试时,似乎 URL 正在被重定向:

301 http://www.foo.com/ https://www.bar.com

我觉得我在重写规则中遗漏了一些东西。任何人都可以就这个问题提出建议吗?提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

想出了这个问题的答案。事实证明,现有的规则都是有效的并且按预期工作。但是,服务器上的 SSL 证书导致不匹配错误。

SSL 证书中的这种不匹配停止了重定向功能。上传必要的证书后,一切都按预期工作。希望这个答案对将来有需要的人有所帮助。谢谢。

【讨论】:

以上是关于301 不带 www 的重定向域有效,但带 www 无效的主要内容,如果未能解决你的问题,请参考以下文章

nginx 301重定向,实现不带www跳转www域名

nginx 301重定向,实现不带www跳转www域名

apache将不带www域名301重定向到带www的域名的配置方法

IIS301重定向:将不带www的域名跳转到带www上

配置301转发服务器

301 重定向与相对 = 规范