【发布时间】:2015-07-28 06:00:41
【问题描述】:
我正在尝试为 HTTP 和 HTTPS 请求将 www 重定向到非 www。我的根 .htaccess 看起来像这样:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://example.com/$1 [R=301]
这并没有完全按预期工作。会发生什么:
访问http://www.example.com 会导致重定向到http://example.com。这表明我的第一个规则和条件有效,mod_rewite 模块是 hunky-dory 并且 .htaccess 已启用。
访问https://www.example.com 不会导致重定向。我留在https://www.example.com
我的问题
为了使上述重写规则起作用,我的服务器必须有 SSL 证书吗?它目前没有,我想知道这是否是事情不工作的原因。
【问题讨论】:
-
不要认为你需要两个规则...你只是检查
HTTP_HOST是否存在www.。它也应该适用于 HTTPS。 -
@MikeRockett 是的,但您需要将协议
http|https显式添加到重写目标。我不确定处理这个问题的动态方法是什么。 -
@RahilWazir - 当然,那是有道理的。
-
@MikeRockett 是的,第一条规则的目标就是问题所在。例如。如何避免对 http 或 https 部分进行硬编码?
标签: apache .htaccess mod-rewrite redirect