PHP网站含URL参数跳转至首页问题求助
哇,这种运行5年的老站突然因为服务器迁移出问题,真的太闹心了!尤其是命令行能正常输出但浏览器跳首页,说明代码本身没问题,问题出在Web服务器层面的配置差异,给你几个针对性的排查方向:
1. 先排查ModSecurity安全规则误判
GoDaddy迁移后经常会默认开启ModSecurity,它可能把带参数的URL误识别为恶意请求,直接重定向到首页。你可以在.htaccess里临时关闭它测试:
<IfModule mod_security.c> SecFilterEngine Off SecFilterScanPOST Off </IfModule>
如果关闭后恢复正常,记得去GoDaddy后台的“Security”模块调整ModSecurity规则,别一直关闭(不安全)。
2. 检查PHP查询参数的传递问题
命令行正常但浏览器不行,大概率是Web服务器没正确把URL参数传递给PHP。在带参数的页面顶部加一段测试代码,分别用命令行(curl www.domain.com/page.php?variable=value)和浏览器访问,对比输出:
<?php var_dump($_GET); var_dump($_SERVER['QUERY_STRING']); var_dump($_SERVER['REQUEST_URI']); exit; ?>
如果浏览器里$_GET是空的,但QUERY_STRING有值,说明PHP的变量解析配置有问题:
- 去GoDaddy后台检查PHP版本,是不是迁移后自动升级了?老站可能依赖旧版本的PHP配置,切换回之前的版本试试。
- 如果用的是PHP-FPM,检查
.htaccess里的FastCGI配置,确保QUERY_STRING被正确传递,比如添加:
<IfModule mod_fastcgi.c> # 替换成你后台对应的PHP版本和路径 SetHandler php74-fcgi .php Action php74-fcgi /php74-fcgi virtual FastCgiExternalServer /home/your_username/public_html/php74-fcgi -host 127.0.0.1:9074 -pass-header Authorization </IfModule>
3. 排查代码中依赖服务器环境变量的重定向逻辑
虽然命令行正常,但浏览器环境下$_SERVER里的变量(比如HTTP_HOST、SERVER_NAME)和命令行不同,老站的代码可能有基于旧主机名的跳转判断,比如:
// 旧代码可能有这种逻辑 if ($_SERVER['HTTP_HOST'] !== 'old_hostname.godaddy.com') { header('Location: /'); exit; }
全局搜索代码里的header("Location:")或者跳转相关的逻辑,看看是不是有依赖旧服务器信息的判断,更新成新的主机名即可。
4. 检查GoDaddy域名绑定与转发设置
登录GoDaddy域名管理后台:
- 确认域名是直接A记录指向新IP,没有设置URL转发(Forwarding),如果开了转发,带参数的URL会被强制跳转。
- 检查“Hosting”里的网站根目录设置,是不是迁移后绝对路径变了,导致服务器找不到页面,触发默认首页跳转?
5. 调整Apache的特殊字符处理配置
如果参数里有斜线或特殊字符,Apache默认可能不允许,导致重定向。在.htaccess里添加:
AllowEncodedSlashes On
按这个顺序排查,应该能快速定位问题——毕竟命令行正常已经帮你排除了代码核心逻辑和数据库的问题,重点就在Web服务器的配置差异上!
内容的提问来源于stack exchange,提问作者Tomas Karafa

