本文目录导读:

通用跳转(推荐)
<?php
// 在页面最顶部添加
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
// 获取完整的HTTPS URL
$redirect_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// 301永久重定向
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect_url);
exit;
}
支持代理服务器的跳转
<?php
// 检测是否通过HTTPS访问(支持代理)
function isHttps() {
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
return true;
}
// 检查X-Forwarded-Proto头(用于代理服务器)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
return true;
}
// 检查服务器端口
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
return true;
}
return false;
}
// 强制跳转
if (!isHttps()) {
$redirect_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect_url);
exit;
}
带session保护的跳转
<?php
// 强制HTTPS,同时保证Session安全
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
// 可选:保存session并重新开始
if (session_status() === PHP_SESSION_ACTIVE) {
session_write_close();
}
$redirect_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect_url);
exit;
}
// 强制使用安全Cookie(建议)
ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
.htaccess方式(Apache服务器)
如果不想用PHP代码,也可以使用.htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
nginx配置文件方式
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
最佳实践建议
- 放在文件最顶部:确保在任何输出之前执行跳转
- 使用301状态码:有利于SEO,告诉搜索引擎这是永久跳转
- 保留原始请求URI:确保用户访问的特定页面路径不会丢失
- 考虑代理服务器:如果你的网站使用CDN或负载均衡器,可能需要使用方法二
使用示例
<?php // 文件顶部 require_once 'security.php'; // 或直接写上面代码 // 后续正常逻辑 echo "这是安全的HTTPS页面";
选择哪种方法取决于你的服务器环境和具体需求,方法一最通用,方法二适合使用代理的场景。