强制用户通过HTTPS而不是HTTP访问我的页面?

时间:2012-11-13 21:23:11

标签: php ssl

跟进问题到这里发布的内容:

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

试着把我的大脑包裹起来,谢谢。

布雷特

3 个答案:

答案 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,请考虑使用您的网络服务器来强制执行该要求。例如,对于Apachemod_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。