问题所在

在把 WordPress 搬家到 Nginx 的过程中遇到了一个非常莫名其妙的问题:

500 Internal Server Error

折腾了一下午也没找出个所以然,检查了好多遍 Nginx 和网站的 conf 文件,感觉没有任何问题,而且上传了一个静态 html 文件,是可以打开的,上传了一个 PHP 探针文件,也可以打开。

越来越莫名其妙,到网上搜也没有搜到问题的根本(没有针对性,不太确定问题出在哪,所以搜也不好搜,往往搜出来的都是不相关的)。

而且,博客后台也能打开,在把 .htaccess 文件中的伪静态规则改成 Nginx 的伪静态规则后,每一篇文章也是完全可以显示的。

最终这个莫名其妙的问题可以总结为“博客只有首页打不开,显示 500 Internal Server Error,其他所有的都是好的,可以打开”。

于是接着搜索,终于恍然大悟,自己太幼稚了,老是想着是服务器配置哪里出错了,而实际上,很有可能是网站本身的主题或者插件导致的问题。

于是更换了一个主题,bingo,可以打开了!

再接着,把 wp-config.php 中的 debug 选项打开,额滴神,一串一串的错误和警告啊,多数都是因为 HotNewspro 这个主题,终于找着问题的根本原因了。

因为主题作者的代码与最新的 PHP 语法有些出入,导致出现了很多警告,而且还有一个错误,就是简写的问题,我的服务器里 short_open_tag 默认是 Off 的,而这个主题需要把简写打开。于是,把 short_open_tag 设置成 On,问题解决了!(注:问题虽然解决了,但是此处要注意,最佳实践应该是设置成 Off 的)

short_open_tag=On

总结教训

遇到问题时,分析和处理问题的思路真的非常重要,不能一棵树上吊死,此路不通,而且感觉自己确实没弄错的情况下,就要想想会不会是其他方面的原因,比如主题和插件。

自己这样一味的搜索来搜索去,因为一直围绕着错误的中心(先入为主的,主观上的错误思路),所以也很难找到问题对应的答案。浪费了大把的时间,头都大了,最终还是没有找到问题所在,实在是有些 frustrating 。

先入为主的麻木地搜索可能把人引入一个错误的胡同。切记!切记!