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

2022-08-30 06:51:55

我只有一个页面,我想强制将其作为HTTPS页面(Apache上的PHP)访问。如何在不使整个目录需要HTTPS的情况下执行此操作?或者,如果您从 HTTP 页面向 HTTPS 页面提交表单,它是否通过 HTTPS 而不是 HTTP 发送表单?

这是我的例子:

http://www.example.com/some-page.php

我希望它只能通过以下方式访问:

https://www.example.com/some-page.php

当然,我可以把这个页面的所有链接都指向HTTPS版本,但这并不能阻止一些傻瓜故意通过HTTP访问它......

我认为的一件事是在PHP文件的标头中放置一个重定向,以检查以确保他们正在访问HTTPS版本:

if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
  header('Location: https://www.example.com/some-page.php');
}

但这不可能是正确的方法,不是吗?


答案 1

我之前的做法基本上就像你写的那样,但没有任何硬编码的值:

if($_SERVER["HTTPS"] != "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

答案 2

你可以用一个指令来做到这一点,并在Apache上mod_rewrite:

<Location /buyCrap.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

如果需要,您可以使用正则表达式使位置随着时间的推移更加智能。


推荐