【问题标题】:htaccess - redirect non-www to https with wwwhtaccess - 使用 www 将非 www 重定向到 https
【发布时间】:2014-12-31 07:40:37
【问题描述】:

我最近从 windows 服务器切换到 godaddy,linux,cpanel 服务器。我不喜欢 htaccess,我认为这应该是一件相当简单的事情,但我做错了。

我的 SSL 证书设置为在这样的网站上工作:https:www.mydomain.com 但不适用于(非 www 网站)。

我希望所有来自 https:example.com/any-folder/any-file 的流量都重定向到 https:www.example.com/any-folder/any-file

所有进入 http:example.com/any-folder/any-file 的流量都重定向到 http:www.example.com/any-folder/any-file

感谢您提供的任何帮助。 这是我现在的 htaccess 文件:(所有请求都被重定向到 https ......我很困惑)

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

【问题讨论】:

  • 我尝试了可能的重复但所有 url 重定向到 https 。这是我试过的:RewriteEngine OnRewriteCond %{HTTP_HOST} !^www\. [NC]RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]RewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]
  • 如您所见,cmets 中的代码实际上并不能正常工作。如果您有其他信息,请编辑问题;-)

标签: .htaccess


【解决方案1】:

这种行为的原因是

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

会将所有缺少www. 的请求重写为http://www.example.com/$1。也适用于 HTTPs 请求。此重写将产生一个新请求,因为它是一个重定向,即您使用 [R] 定义的内容。

之后,下一条规则

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

会将所有不是 HTTP 的请求重定向到 https://www.example.com/$1。即使原始请求不应该是 HTTPs。

你必须这样做:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

【讨论】:

  • 我试过你的建议,但还是有问题。 example.com 不会重定向到 example.com,因此页面显示证书错误。 **** 回复时遇到问题,前 2 个 url 应该以 https 开头 .... 它在显示为链接时不显示 ***** 抱歉 example.com 确实重定向到 example.com
  • 在测试之前您是否清理了浏览器缓存?我建议始终在新的隐私浏览选项卡中测试重写规则更改,因为您的浏览器会缓存此重定向。
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 2017-05-03
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2012-02-06
  • 2014-10-28
相关资源
最近更新 更多