PHP域名自动跳转是指在Web开发中,根据服务器接收到的请求域名(HTTP_HOST)或URL路径,利用PHP脚本将用户自动重定向到另一个指定的域名或子域名。这种技术广泛应用于网站迁移、多语言站点切换、SSL强制跳转、同一站点不同域名解析等场景。

实现PHP域名自动跳转的核心是调用header()函数并传递Location头,配合exit()或die()终止脚本执行,防止后续内容输出干扰重定向。基本语法为:header('HTTP/1.1 301 Moved Permanently')(用于永久重定向,利于SEO)或header('HTTP/1.1 302 Found')(临时重定向),然后header('Location: https://新域名' . $_SERVER['REQUEST_URI'])。
以下是一个典型的域名自动跳转PHP代码示例(常见于.htaccess不可用的环境,或需要复杂逻辑判断的场景):
<?php // 获取当前请求的主机名(不含端口) $host = $_SERVER['HTTP_HOST']; // 定义目标域名(需要跳转到的域名) $targetDomain = 'example.com'; // 定义需要保留跳转的路径(如果希望保持当前URI) $redirectURI = $_SERVER['REQUEST_URI']; // 判断当前域名是否等于目标域名,如果不相等则进行跳转 if ($host !== $targetDomain) { // 设置301永久重定向 header('HTTP/1.1 301 Moved Permanently'); // 目标地址:https + 目标域名 + 当前请求路径(含查询参数) header('Location: https://' . $targetDomain . $redirectURI); exit; } // 后续正常业务逻辑 ?>
在实际生产环境中,还需要注意以下几点:
1. 避免重定向循环:务必先判断当前域名与目标域名是否一致,如果不一致才发起跳转;否则会导致无限重定向。
2. 考虑协议(HTTP/HTTPS):如果目标强制使用HTTPS,应在Location中明确指定https://。也可通过$_SERVER['HTTPS']判断当前协议,统一强制跳转。
3. 保留路径与查询参数:使用$_SERVER['REQUEST_URI']可以保留原始URI(包含路径和查询字符串);若要更精确控制,可使用$_SERVER['QUERY_STRING']拼接。
4. 性能考虑:如果只是单纯的www子域名到非www域名(或反之)的跳转,.htaccess或Nginx配置的rewrite比PHP解析更快。但在需要复杂逻辑(例如根据用户IP、语言偏好跳转不同域名)时,PHP方案更灵活。
5. 安全过滤:不要直接信任$_SERVER['HTTP_HOST']的值,因为它可能被HTTP Host头攻击篡改。建议在目标域名白名单内比较,或使用正则验证域名格式。
另外,对于多域名跳转场景(例如将多个旧域名统一跳转到主域名),可以维护一个数组:
<?php $allowedHosts = ['old-domain.com', 'old-domain.net', 'another.com']; $currentHost = $_SERVER['HTTP_HOST']; // 如果当前主机不在允许的主域名列表中,可能也需要跳转(可根据业务调整逻辑) if (in_array($currentHost, $allowedHosts)) { // 跳转到主域名 header('HTTP/1.1 301 Moved Permanently'); header('Location: https://primary-domain.com' . $_SERVER['REQUEST_URI']); exit; } ?>
最后,务必在header()调用之前确保没有输出任何HTML或空白字符,否则会触发“headers already sent”错误。最佳实践是将该跳转逻辑放在脚本最顶部,且使用ob_start()控制输出缓冲或直接禁用错误显示。

查看详情

查看详情