小编典典

使用 .htaccess 和 mod_rewrite 强制 SSL/https

all

如何使用 PHP 中特定的 .htaccess 和 mod_rewrite 页面强制使用 SSL/https。


阅读 79

收藏
2022-05-24

共1个答案

小编典典

对于
Apache,您可以使用mod_ssl以下命令强制
SSL SSLRequireSSL Directive

该指令禁止访问,除非为当前连接启用 HTTP over SSL(即 HTTPS)。这在启用 SSL
的虚拟主机或目录中非常方便,可用于防御暴露应受保护的内容的配置错误。当此指令存在时,所有未使用 SSL 的请求都将被拒绝。

不过,这不会重定向到
https。mod_rewrite要重定向,请在您的
.htaccess 文件中尝试以下操作

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

或提供的各种方法中的任何一种

如果您的提供商禁用了 .htaccess,您也可以在 PHP 中解决此问题(这不太可能,因为您要求它,但无论如何)

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
    if(!headers_sent()) {
        header("Status: 301 Moved Permanently");
        header(sprintf(
            'Location: https://%s%s',
            $_SERVER['HTTP_HOST'],
            $_SERVER['REQUEST_URI']
        ));
        exit();
    }
}
2022-05-24