使用 .htaccess 在 HTTP 和 HTTPS 之间正确切换
我们有一个购物网站,托管在共享主机(Mediatemple Gridserver)上。 网站的某些部分需要使用 HTTPS(结帐等),但其余部分应使用 HTTP。
有谁知道我们如何始终强制对特定 URL 正确使用 HTTP/HTTPS? 我们已经让它在各种状态下工作,但我们无法收到对应该在 HTTP 上但通过 HTTPS 请求正确切换回来的页面的请求。
我环顾四周,但找不到合适的答案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我在 WordPress 中的管理文件夹中使用了与此类似的内容:
RewriteCond %{HTTPS} on
部分可能不适用于所有 Web 服务器。 例如,我的网站主机需要RewriteCond %{HTTP:X-Forwarded-SSL} on
。如果您想强制执行相反的操作,请尝试:
如果您想要一些替代方法来执行此操作,请查看 询问apache。
I use something similar to this for my admin folder in wordpress:
The
RewriteCond %{HTTPS} on
portion may not work for all web servers. My webhost requiresRewriteCond %{HTTP:X-Forwarded-SSL} on
, for instance.If you want to force the reverse, try:
If you want some alternate ways to do it, check out askapache.
这应该适用于几乎所有场景,并且应该适用于您的实际虚拟主机或 .htaccess:(
不要忘记 %{REQUEST_URI} 之前的斜杠,因为这可能允许传递端口号,这是危险的)
This should work in pretty much every scenario and should work in your actual vhost or .htaccess:
(do not forget the slash before %{REQUEST_URI} as this may allow passing a portnumber, which is dangerous)
我在负载均衡器后面遇到了一些问题。 这就是我修复它的方法。
I had some problem being behind a loadballancer. This how i fixed it.
对我来说这个工作(我将它用于 WordPress 网站并重定向到 HTTPS)。 您必须在 RewriteEngine 和 RewriteBase 行后面添加条件和规则行:
查看条件
RewriteCond %{HTTP:X-Forwarded-Proto} !https
- 只有这适用于我的服务器托管。(我也尝试了
RewriteCond %{SERVER_PORT} !^443$
或RewriteCond %{HTTPS} off
,但没有成功。For me worked this (I used it for wordpress site and redirecting to HTTPS). You have to add the condition and rule lines just behind RewriteEngine and RewriteBase lines:
Have a look to condition
RewriteCond %{HTTP:X-Forwarded-Proto} !https
- only this worked for my server hosting.(I tried
RewriteCond %{SERVER_PORT} !^443$
orRewriteCond %{HTTPS} off
as well, but without success.如此答案中详细介绍的,修复您的应用程序以在需要时使用
https://
链接。 不要依赖自动重定向,如果您没有通过https://
访问https:// 提供链接/表单,这可能会导致您产生错误的安全感
URL 也是如此。 自动使用mod_rewrite
会使检测此类错误(也可能是漏洞)变得更加困难。As detailed in this answer, fix your application to use
https://
links when needed. Don't rely on automatic redirections, this could lead you to a false sense of security if you haven't made your links/forms served overhttps://
go tohttps://
URLs too. Usingmod_rewrite
automatically makes it harder to detect such mistakes (which can also be vulnerabilities).我认为应该是:
请参阅 mod_rewrite 文档。
I think it should be:
See the mod_rewrite documentation.