强制HTTPS用于特定URL

dco*_*bus 2 .htaccess ssl https redirect

这应该是一个快速...这是我目前的.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
Run Code Online (Sandbox Code Playgroud)

我需要做的是确保如果http://www.mydomain.com/cart/达到,它需要强制HTTPS ...... /cart/以及其中的任何内容/cart/

Bru*_*uno 6

一旦请求被发送到http://www.mydomain.com/cart/,如果请求中有任何敏感数据,则为时已晚.强迫它破裂!至少,它会告诉您链接有问题.以前答案中的更多细节:

[...]当请求到达服务器时,为时已晚.如果有MITM,他会在你收到请求之前完成攻击(或部分攻击).

那时你能做的最好的事情是回复没有任何有用的内容.在这种情况下,重定向(使用301或302和Location标头)可能是合适的.但是,如果用户(甚至您作为开发人员)忽略警告,它可能会隐藏问题(在这种情况下,浏览器将遵循重定向并几乎透明地重试请求).

因此,我只是建议返回404状态:

  • http://yoursite/并且https://yoursite/是有效的两个不同的网站.没有理由期望URI空间中的所有资源从一个到另一个的1:1映射(就像你可以拥有完全不同的层次结构一样 ftp://yoursite/).
  • 更重要的是,这是一个应该在上游处理的问题:导致用户使用此资源的链接http:// 应被视为已损坏.不要让它自动工作.对于不应该存在的资源具有404状态是好的.此外,在出现错误时返回错误消息是好的:它会强迫您(或至少提醒您)作为开发人员,您需要修复导致此问题的页面/表单/链接.

编辑:(示例)

假设您拥有http://example.com/网站的非安全部分,允许用户浏览项目.他们在那个阶段没有登录,因此可以通过普通的HTTP进行操作.

现在,这是购物车/付款时间.你想要HTTPS.您将用户发送给https://example.com/cart/.如果将用户发送到购物车部分的其中一个链接使用普通HTTP(即http://example.com/cart/),那么这是一个开发错误.它不应该在那里.当您认为要发送进程时让进程中断https://example.com/cart/允许开发人员看到它(并且一旦修复,用户就不应该遇到问题).

如果它只是关于站点的HTTPS部分(通常是通过某个链接的HTTP GET)的话,它不一定是那么大的风险.

当自动重定向变得更加危险时,它们会隐藏更大的问题.

例如,您已经开启https://example.com/cart/creditcarddetails并且您已经填写了一些应该保留在SSL上的信息.但是,开发人员犯了一个错误,并http://在表单中使用了普通链接.此外,开发人员(毕竟是用户/人)在Firefox中点击"不要再显示此消息"时显示"警告:您将从安全页面转到非安全页面"(顺便说一句,不幸的是,Firefox警告后验:它在向用户显示消息时已经提出了不安全的请求.现在,具有敏感数据的GET/POST请求首先发送到该不正确的普通http://链接,并且自动重写告诉浏览器再次尝试该请求https://.它看起来很好,因为就用户而言,这一切都发生在几分之一秒内.但事实并非如此:敏感数据是明确发送的.

制作纯粹的HTTP部分应该只通过HTTPS而不做任何有用的事实上有助于你更清楚地看到错误.因为如果链接被正确实现,用户永远不会在那里结束,这对他们来说实际上不是问题.