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

301 Redirect domain without www works, but with www does not

目前我正在处理将域 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 重定向根本不起作用。本质上,上面的第一组重定向有效,而第二组无效。

这是我的虚拟主机文件:

<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

我觉得我在重写规则中遗漏了一些东西。谁能就这个问题提出建议?预先感谢您的帮助。

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

SSL 证书不匹配导致重定向功能停止。上传必要的证书后,一切都按预期进行。希望这个答案对以后有需要的人有所帮助。谢谢。