【问题标题】:Force subset of webpages as HTTPS强制网页子集为 HTTPS
【发布时间】:2011-07-11 20:24:40
【问题描述】:

我想强制一部分网页使用 https,并将所有其他网页强制使用 http。 在 htaccess 中,我使用了我在另一篇文章中找到的以下脚本,但这不起作用...

RewriteCond %{HTTPS} off
RewriteRule ^(login|signup)\.php https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]

RewriteCond %{HTTPS} on
RewriteCond ${REQUEST_URI} !(login|signup)\.php
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]

HTTP 应该是强制的,HTTPS 应该是强制的,但是例如https://mywebsite.com/signup 在我的浏览器中会产生一个无限循环错误。任何想法出了什么问题?

我将代码更改为以下似乎可行,但由于网页上的安全和不安全项目,现在 SSL 仅部分实现。我检查了网址,例如图像、样式表和外部 javascript 文件位这些都是相对的,不应该造成问题...如果有人知道如何处理这个问题,我会很高兴听到它。

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login$ [OR]
RewriteCond %{REQUEST_URI} ^/signup$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !login$
RewriteCond %{REQUEST_URI} !signup$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}  [R,L]

【问题讨论】:

  • 无需对非登录/注册页面强制使用 HTTP(顺便说一句,帐户页面(如果有的话)——它们将通过 HTTP 提供服务吗?)。而是首先在您的代码中生成正确的 URL(即,而不是 <a href="/aboutus"> 执行 <a href="http://www.example.com/aboutus">),因此客户将始终在没有 mod_rewrite 帮助的情况下访问 HTTP。如果客户想通过 HTTPS 访问主页或任何其他页面......然后让他 - 这没有任何问题。只要您的所有链接都具有正确的 URL,除非客户故意更改 URL,否则这种情况永远不会发生。
  • 通过不强制 HTTP,您将不会遇到安全页面上的不安全内容 (CSS/JS/Images) 的问题。这就是我一直在为我的网站编写代码的方式。是的 - 更改所有链接以在现有页面中包含域名和协议是一项相当多的工作......但是对于新页面/新项目,它没有区别(没有额外的开销)。是的——你应该能够通过 mod_rewrite 修复它(添加一个或 2 个以上条件)..但这不是正确的方法(至少在我看来)。
  • 感谢您的帮助。我现在使用 mod_rewrite 在那些需要保护连接的页面上强制使用 https。我删除了强制 http 的部分,因为这也强制安全页面上的引用,例如js/css/image 文件被重定向到 http(这些文件没有在 RewriteCond 中验证),并给出了在同一页面上有安全和非安全项目的问题。正如您所建议的那样,将所有内容正确地引用到 http 或 https(如果用户更改 url,则强制使用 https)以及完整的 URL,现在一切正常。谢谢!

标签: .htaccess mod-rewrite https


【解决方案1】:
  1. 尝试在 .htaccess 顶部的某处添加此行:

    Options +FollowSymLinks -MultiViews

  2. 也许您有一些其他规则来执行此重定向 - 如果您提供 .htaccess 文件的全部内容会很好。

  3. 您可能在实际的 php 脚本中进行了重定向。

在任何情况下 -- 如果您可以编辑 Apache 的配置文件(httpd.conf 或 httpd-vhost.conf),那么您可以启用重写调试 (RewriteLoglevel 9) 看看到底发生了什么on -- 这是最好的选择(如果可以的话)。

【讨论】:

  • 感谢您的帮助。添加 -MultiViews 不会改变错误,没有其他重定向规则,我完全清理了我的 htaccess 文件以进行调试。我无权访问配置文件,但我会询问我的主机。
  • @DigitalMD 如果它是共享主机,那么我怀疑他们会为您执行此操作(非常不可能),因为它需要重新启动 Apache + 这样的日志增长非常快.. 我不确定它是否可以仅针对 1 个特定域启用...
猜你喜欢
  • 2015-02-27
  • 2015-04-01
  • 1970-01-01
  • 2015-04-19
  • 2016-07-28
  • 1970-01-01
  • 2014-08-15
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多