You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

迁移服务器后访问PHP页面出现HTTP ERROR 500问题求助

排查新cPanel+Apache服务器PHP页面500错误的思路

这种情况我之前帮同行排查过好多次,结合你给出的测试结果——命令行执行PHP正常、旧服务器全环境正常,仅新服务器浏览器访问报错,问题肯定出在Web服务器(Apache)与PHP的交互环节,而非代码或PHP本身。下面是一步步的排查方案:

1. 先抓关键:查看Apache错误日志

500错误最核心的线索在日志里,别瞎猜!在cPanel里找「Error Log」(一般在「Metrics」或「Advanced」分类下),或者通过SSH登录新服务器查看:

# 你的网站专属错误日志(cPanel用户可直接访问)
tail -n 20 ~/public_html/error_log

# 全局Apache错误日志(需要root权限,cPanel用户可能无法访问)
tail -n 20 /usr/local/apache/logs/error_log

日志里会明确告诉你是模块缺失、权限问题还是.htaccess规则冲突——比如「Call to undefined function mysqli_connect()」就是缺mysqli模块,「Permission denied」就是权限问题。

2. 核对PHP版本与SAPI模式

旧服务器和新服务器的PHP运行模式可能存在差异:

  • 登录cPanel的「Select PHP Version」,先确认PHP版本和旧服务器完全一致(比如旧的是PHP7.4,新的别选8.2)
  • 再看SAPI模式:旧服务器可能用的是mod_php,新服务器默认可能是PHP-FPMFastCGI。不同模式对应的php.ini配置文件、加载模块是分开的!
    • 如果是PHP-FPM,cPanel里会有「PHP-FPM Settings」,可以单独配置每个域名的PHP参数

3. 对比PHP模块加载情况

虽然命令行(CLI)执行PHP正常,但Web环境的PHP模块可能和CLI不一样:

  • 在旧服务器上创建一个phpinfo.php,内容是<?php phpinfo(); ?>,访问后保存所有加载的模块列表
  • 在新服务器的public_html下也创建同样的文件,尝试访问(如果能打开的话),对比模块差异;如果打不开,就通过cPanel的「Select PHP Version」里的「Extensions」选项,勾选旧服务器有的所有模块(比如mysqli、gd、curl、mbstring等)

4. 检查.htaccess文件的兼容性

旧服务器的.htaccess可能有针对特定PHP环境的规则,放到新服务器上会冲突:

  • 先把public_html下的.htaccess重命名为.htaccess.bak,然后刷新浏览器试试
  • 如果页面正常了,就逐行恢复.htaccess的规则,找到导致500的那一行——比如旧服务器用AddType application/x-httpd-php .php,新服务器用PHP-FPM的话,这条规则会导致错误,需要改成AddHandler application/x-httpd-ea-phpXX .php(XX是你的PHP版本号,比如74)

5. 确认文件/目录权限与所有者

命令行能执行不代表Apache能读取:

  • 确保public_html下的所有文件权限是644,目录权限是755
  • 检查文件所有者:用SSH执行ls -l ~/public_html/,确保所有者是你的cPanel用户名(不是nobody或apache),如果不是,执行:
chown -R your_cpanel_username:your_cpanel_username ~/public_html/

(把your_cpanel_username换成你的实际用户名)


内容的提问来源于stack exchange,提问作者Pak Ho Cheung

火山引擎 最新活动