这应该是一个快速的...这是我目前的.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
我需要做的是确保如果达到http://www.mydomain.com/cart/
,则需要强制使用HTTPS ... /cart/
以及/cart/
内的任何内容
答案 0 :(得分:6)
请求发送到http://www.mydomain.com/cart/
后,如果请求中有任何敏感数据,则为时已晚。强迫它破裂!至少,它会告诉您链接有问题。以前答案中的更多细节:
[...]当请求到达服务器时, 太晚了。如果有一个MITM,他已经完成了他的攻击(或部分攻击 在你收到请求之前。
到那时你能做的最好的事情是回复没有任何有用的内容。在 这种情况下,重定向(使用301或302和Location标头) 可能是合适的。但是,它可能会隐藏用户(或 即使你作为开发人员)也忽略了警告(在这种情况下,是 浏览器将遵循重定向并几乎重试请求 透明)。
因此,我只建议返回404状态:
http://yoursite/
和https://yoursite/
实际上是两个不同的网站。没有理由期望所有的1:1映射 URI空间中的资源从一个到另一个(仅在同一个空间中) 因为你可以有一个完全不同的层次结构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而不做任何有用的事实上有助于你更清楚地看到错误。因为如果链接被正确实现,用户永远不应该在那里结束,这对他们来说并不是真正的问题。
答案 1 :(得分:1)
尝试在其他规则之前添加此(但在RewriteBase之后):
RewriteCond %{HTTPS} off
RewriteRule ^cart/(.*)$ https://www.mydomain.com/cart/$1 [R,L]