通过HTaccess强制使用SSL

5

以下是我对SSL的一些问题。

RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]
  1. 以下是通过HTAccess强制所有内容走SSL的代码。是否有一种方法可以将此代码限制为特定IP地址?我想仅针对我的IP地址强制使用SSL,以便我可以使用新的SSL链接彻底测试网站,并在发布到实际网站之前查看(确保)一切正常。只使用我的IP进行测试将更加容易。

  2. SSL会影响任何get/post请求吗?也就是说...如果我使用上面的那段代码,并且有人在页面上提交表单,它会强制将其转换为SSL,这会被认为是重定向并清除任何post/get变量吗?我只是想提前了解它是否会破坏我正在运行的任何东西。

  3. 你们中有没有人在强制使用SSL后遇到过许多网站无法正常工作的情况吗?


1
  1. 使用一条以上的RewriteCond行和%{REMOTE_ADDR}变量来匹配IP地址;
  2. 这是重定向--它会干扰POST数据(但不会干扰GET);
  3. 这完全取决于您如何设计您的网站--如果您在您的网站上做得很好(在必要时使用HTTPS链接),但仍有人试图手动使用HTTP(特别是在使用POST时--例如提交表单),那么只需抛出一个错误(他是故意这样做的,所以这是他自己的问题)。
- LazyOne
顺便说一句 -- 根据网站部署的位置等,您可以使用 RewriteCond %{HTTPS} =off [NC]而不是检查端口号,因为您可以轻松地将网站放在不同的非标准端口上(例如8080等)。 - LazyOne
2个回答

2
如果您想确保您的网站与HTTPS良好配合,请关闭普通HTTP(假设它适用于整个服务器),或使用Apache Httpd指令(在.htaccess或主配置文件中),使需要通过HTTPS提供服务的页面在通过普通HTTP访问时返回错误(例如404)。 您可以使用Deny from xxxxxxx针对特定IP地址实现此目的。
不要依赖于mod_rewrite或类似工具将普通HTTP请求重定向到其HTTPS等效项。这样做最多只会隐藏问题,并产生虚假的安全感。
原因是即使进行重定向,最初的请求也是明文形式,然后才被重定向:请确保所有引用在使用之前都使用https:// URI。您可以在此答案中找到更多详细信息。

非常好,谢谢。我最终通过将核心URL更改为HTTPS来使所有内容正常工作。一旦使用HTTPS,它们就会保持在该协议中。因此,在登录时,我只需确保表单指向HTTPS,它们就会在整个站点中保持不变。这是一个管理面板,因此无需强制关闭HTTP...但是您解释的方式很有效。谢谢。 - Ninjakreborn

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接