【问题标题】:Forcing non-SSL in htaccess only partly works在 htaccess 中强制使用非 SSL 仅部分有效
【发布时间】:2015-02-02 17:00:00
【问题描述】:

我已在我的 htaccess 文件中尝试过此操作,以强制通过 SSL 访问我的页面的用户被重定向到非 SSL 版本:

RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这适用于用户访问 SSL 版本的 www.mydomain.com,而不是 SSL 版本的 mydomain.com

我认为这部分是因为我在我的网络托管服务提供商控制面板上激活了将用户从 mydomain.com 转发到 www.mydomain.com。

有谁知道如何让两者都工作?

【问题讨论】:

  • 使用http://domain.com时的确切问题是什么?
  • 没问题。当用户尝试访问domain.com 的 SSL 变体时会出现此问题。有的浏览器因为重定向太多而报错,有的只是说页面无法显示。
  • 不要在您的提供商控制面板上使用 mod_rewrite 和重定向。你可能会得到一个重定向循环,因为它们可能会互相争斗。使用其中一种。我不会使用控制面板选项进行任何类型的转发。
  • 听起来是个好主意 :) 如果我想同时实现这两个文件,htaccess 文件的外观如何?也就是把非www转发到www,同时把非www和www的SSL版本转发到非SSL的www?

标签: apache .htaccess redirect ssl


【解决方案1】:

如果我想同时实现这两个,htaccess 文件会是什么样子?也就是将非www转发到www,同时将非www和www的SSL版本转发到非SSL www?

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

【讨论】:

  • 感谢您的回复。它适用于非缓存浏览器,但不适用于之前访问过我网站的浏览器。有些人给出消息“重定向过多”,有些人说“无法连接”,有些人说“该站点可能暂时不可用或太忙”或“您无权访问 / 在此服务器上”
  • 更新:不适用于非 www,但适用于 SSL 非 www 等。
  • 看到301重定向被浏览器积极缓存。因此,通常建议在测试期间仅使用[R],并在情况稳定后切换到301。我建议您使用完全不同的浏览器来避免此问题。非 www 到 www 的规则对 http 和 https 的工作方式相同。因此,http 应该在浏览器丢弃其缓存后立即开始工作。
猜你喜欢
  • 2013-04-28
  • 2013-01-19
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2017-08-22
  • 2023-03-27
相关资源
最近更新 更多