解决Joomla站点的500错误

维护的某Joomla网站突然不能访问,前后台都报500错误。

网上搜了一下,结合apache日志,初步认为是服务器的配置问题。虽然不明白为什么服务器配置为什么会突然不行(因为应该是没人改过),但因为最近有另外的人也在使用后台,心想也许是他的某个操作触发了隐藏的漏洞或者bug。于是就往服务器配置这条路上走了很远。

网上有说是joomla开通SEF功能后的配置问题的,有要修改.htaccess文件的,等等,都不起作用。怕配置文件改除了隐藏的bug自己没发现,甚至干脆尝试了重装XAMPP,数据库备份后恢复,重新配置apache等。仍然没解决,从中午开始忙到晚上,十分崩溃。

然后看PHP源代码。发现所有的php文件头部都被加入了一段混淆过的php代码,于是看了看规律貌似是这样的:

<?php $rzzeaxkup =  xxxxxxxxxxx此处省去无数混淆过的代码xxxxxxxxxx    $rzzeaxkup=$noamvuns-1; ?>

应该是感染了什么,或者被人利用漏洞入侵了。于是使用正则表达式进行查找替换,全部清除掉了,用到的表达式:

^<\?php \$rzzeaxkup.*\$rzzeaxkup=\$noamvuns-1; \?><\?php

以为问题解决后,结果依然显示500错误。

于是,绕不开的代码啊,干起程序员本行,以行行代码调试。终于发现在/libraries/import.legacy.php中有一行:

require_once JPATH_PLATFORM . ‘/legacy/form/field/form.php’;

程序在这里就跑不下去了。于是打开form.php文件,一看愣了。

满屏的乱码,文件开头是这样的:

<?php echo ‘abc’;/* PHP Encode by  http://Www.PHPJiaMi.Com/ */error_reporting(0);ini_set(“display_errors”, 0)

里面指向的 www.phpjiami.com看起来是一个专门做代码混淆加密的网站。也许本站点感染的病毒/木马/后门程序的开发者用到了这个在线加密??

看了看,感觉这个文件应该没什么大作用,于是果断的将对它 require_once的语句注释掉。

再打开网站,前后台终于恢复。

此时已经是凌晨一点半了,详细原因后续再查找,这个加密文件form.php到底做什么用,也待后续再了解吧。

新建的Joomla网站慢的原因之一

这两天帮朋友搭建基于Joomla的网站,服务器放置在香港。从家里访问起来始终很慢。
一开始以为是大陆和香港的网络问题。后来尝试用香港的VPN连接,各种速度的测试。
发现虽然有改善,但仍然很慢。

在排除了网络、服务器硬件性能等一系列因素后,将注意力放在了网站本身。

最后发现其实问题很简单,哪怕不用特别的分析软件,就凭肉眼,也能发现:
当首页加载的时候,浏览器一直在加载http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js文件。
原来如此!google可是被伟大的G.F.W墙掉的阿!能成功加载才怪了。

解决办法就是把所有的调用修改掉,要么修改一个大陆访问很快的jquery库,要么修改为调用网站服务器的本地文件。
要注意的是,joomla在安装了各种模块后,对google jquery文件的调用可能不止一处。
在我的case里,一共两个地方:
1,K2里面有调用,解决起来很简单,只要在管理后台K2的设置里面去修改就可以;
2,Responsive Contact Form模块,这个要修改mod_responsive_contact_form.php:

// $document->addScript('//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js');
$document->addScript(JURI::root(true).'/media/k2/assets/js/jquery-1.8.3.min.js');

这是最简单的办法,不知道如果模块升级,这个文件会不会被更新掉。考虑到这是一个简单的模块,哪怕有新版本,要么不升级,要么升了再检查修改吧。