我想将我的网站用户从 http://mysite
重定向到 https://mysite
。
我如何在PHP中以编程方式实现这一点?
您可以使用if(!empty($_SERVER['HTTPS']))
检查是否使用了SSL。
如果您正在使用标准端口,测试$_SERVER['SERVER_PORT'] == 443
也可以工作,但是检查是否使用了HTTPS比测试端口是否为默认的SSL端口更好。
然而,重定向不应该通过PHP完成,而应该通过.htaccess(如果您正在使用Apache)完成:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
如果是https,那么变量$_SERVER['HTTPS']
将被设置为非零值:
if (isset($_SERVER['HTTPS'])) {
# it's https
} else {
# it's not https
}
$_SERVER['HTTPS']
设置为on
,则页面通过https加载。但是,您应该将cookie标记为安全,可以使用setcookie
的一个参数来完成。如果cookie不安全,则可能通过未加密的http传输,并且即使用户立即重定向,它们也可能被窃取。
http://php.net/manual/en/function.setcookie.php
对于实际的重定向,我建议使用 .htaccess 重写而不是 PHP。创建一个 .htaccess 文件,其中包含以下内容。RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond ^(.*)$ https://www.example.com/$1 [R=301,L]
.htaccess
文件保存在哪里? - isekaijinphp_ini
调用能否被实际设置在我的 php.ini
文件中替代? - isekaijin使用$_SERVER['HTTPS']
来确定。
$_SERVER['HTTPS']
不存在,这将引发E_NOTICE
。请使用isset()
或!empty()
。 - ThiefMaster