用户使用万网空间高级版,后升级到阿里云虚拟主机标准版,系统自动升级完毕,数据库链接也更新,结果出现访问portal.php页面报错,而/portal.php?mod=list&catid=36这类带参数的页面却可以正常访问。什么原因呢?
看页面报错是500 internal server error,但这个不是真实报错,通过阿里云工单获得了真实报错,错误内容为:
[Tue Jun 14 13:07:05 2016] [error] [client 46.161.9.23] Premature end of script headers: portal.php, referer: http://xxx.com/portal.php
查了一下中文网站,基本都不靠谱,包括阿里云给的解决方法也不对路:
1、.htaccess文件写入错误的代码
在.htaccess文件中,可能因为添入了一些与源文件冲突的代码,可以建议将服务器上的.htaccess文件备份后,删除测试。(.htaccess文件以“.”开头,在linux中是隐藏文件,可以通过ftp工具设置显示隐藏文件查看)
(概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。)
2、文件权限设置错误
后台目录和文件权限默认为755,二图片,文字等html文件应该是644,刚上传的文件后出现500,应该主要检查文件权限。可以通过ftp修改文件权限。
3、安装wordpress出现500 Internal Server Error
安装新版本wordpress出现500 Internal Server Error的问题:
在./wp-includes/class-http.php的291行,改成
$request_order = apply_filters( 'http_api_transports', array( 'streams' ), $args, $url );
也就是去掉这几个字符。
'curl',
注意:
部分wordpess程序可能不是291行,那请搜索
$request_order = apply_filters( 'http_api_transports', array( 'curl', 'streams' ), $args,$url );
然后将这一句代码替换为
$request_order = apply_filters( 'http_api_transports', array( 'streams' ), $args, $url );
然后覆盖到wp-includes文件夹下,覆盖前,为了防止出错,请备份下原文件。
4、服务器资源超载
同一时间内处理器有太多进程需要处理,会出现500。
最后在海外英文网站找到了一些线索,基本都说是服务器fcgi的配置及php memory limit的问题。
后来将此问题反馈给阿里云售后,答复是不能调整服务器,无奈,最终在征求客户同意后,更换为我司租用阿里云服务器打造的安全加强型虚拟主机上,问题解决!看来还是服务器的问题,只不过阿里云店太大了,小客户遇到这类问题很难撼动他们自己认为对的原则。