跟进问题到这里发布的内容:
How can I force users to access my page over HTTPS instead of HTTP?
我已将以下代码添加到一个页面,即我的CART目录的index.php页面。
if($_SERVER["HTTPS"] != "on")
{
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
exit();
}
当我从索引页面开始浏览网站时,CART目录中的所有文件都是通过HTTPS(我实际想要的)加载的,但是如果我点击指向CART文件夹之外的另一个页面的链接,它会返回到HTTP。
这是如何运作的?对于CART目录中的页面,HTTPS如何保持活动状态?如果我在CART目录中输入页面的URL,则不会强制执行HTTPS,这是有道理的。
网站网址为http://wtc.betaforming.com
试着把我的大脑包裹起来,谢谢。
布雷特
答案 0 :(得分:1)
我建议将这段代码添加到根目录中的.htaccess文件(如果你运行的Apache)。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} =off
RewriteRule ^DIRECTORY1|DIRECTORY2|DIRECTORY3 https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/DIRECTORY1|DIRECTORY2|DIRECTORY3
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
将DIRECTORY1,DIRECTORY2等替换为您要强制启用HTTPS的目录,然后反向执行(下面的代码),如果不是DIRECTORY1,DIRECTORY2等,则重定向到HTTP。
希望这有帮助
答案 1 :(得分:1)
您在的问题中回答了自己的问题:
这是如何运作的?对于CART目录中的页面,HTTPS如何保持活动状态?
...当你说:
我已将以下代码添加到一个页面,即我的CART目录的index.php页面。
请参阅?您对购物车目录中的页面强制执行HTTPS要求,但不在其他地方强制执行。这反映了您在网站上看到的内容。如果您想要在整个站点范围内使用HTTPS,请考虑使用您的网络服务器来强制执行该要求。例如,对于Apache
和mod_rewrite
,您可以尝试这样的事情:
<IFModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IFModule>
修改强>
在帖子的评论中,您说“我正在尝试了解在从index.php页面浏览到CART目录中的其他页面时如何/为什么要强制执行HTTPS”。我的猜测(这是猜测,因为你没有向我们展示你的代码)是这些URL是以ssl无关的方式构建的,如下所示:
<a href="/cart/some_page.html">I'm SSL-enabled on a page with HTTPS in the address bar</a>
但是,如果没有看到你的代码,就不可能说了。
干杯
答案 2 :(得分:1)
<?php
// Require https
if ($_SERVER['HTTPS'] != "on") {
$url = "https://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
header("Location: $url");
exit;
}
?>
尝试在您尝试在HTTPS中访问的文件中添加此项,并强制浏览器加载HTTPS。