Virtualmin虚拟主机中Drupal无法运行问题解决
最近Kaijia发现虚拟主机也有虚拟主机的用处,在搞测试的时候非常方便,可以同时开几个虚拟主机一起测试,备份相当也很方便,测试到某一步出了问题还能直接还原备份文件。于是这次Kaijia装了个Virtualmin测试新的Info Flow平台,这个平台是架设在Drupal上的,结果刚传完Drupal的文件,打开网站的首页直接弹出了500错误提示”Internal Server Error“。
一开始Kaijia以为是缺少了某个Drupal需要的php模块,于是打开Virtualmin的Apache Error Log菜单一看发现了这样一条错误日志:
1 |
[Tue Jul 16 13:43:56 2013] [alert] [client IP] /home/用户名/public_html/.htaccess: Option FollowSymLinks not allowed here |
错误的提示是“Option FollowSymLinks not allowed here”,即不允许在.htaccess文件中使用FollowSymLinks属性。
FollowSymLinks属性的作用是允许服务器引用符号链接,在Apache的文档中给FollowSymLinks描述了如下注释:
Even though the server follows the symlink it does not change the pathname used to match against
<Directory>
sections.The
FollowSymLinks
andSymLinksIfOwnerMatch
Options work only in<Directory>
sections or .htaccess files.Omitting this option should not be considered a security restriction, since symlink testing is subject to race conditions that make it circumventable.
由此看来问题是由于Virtualmin禁用了FollowSymLinks由于整个环境是Kaijia控制的并且文档中也提示不是安全威胁,于是Kaijia在Webmin中尝试允许.htaccess设置FollowSymLinks,结果应用设置后仍然出现这个问题。于是Google了一下,找到了Virtualmin论坛中的一篇讨论,jonloh提到在一个开放的虚拟主机情况下,FollowSymLinks的确存在一定的安全隐患,另外他还提及,Drupal开发者正在讨论在Drupal 8.0中将FollowSymLinks替换为SymLinksIfOwnerMatch,所以这样的话解决方案就非常方便了。
首先通过FTP访问虚拟主机目录,编辑public_html/.htaccess和public_html/sites/default/files/.htaccess这两个文件,找到(分别是第14和第3行):
1 |
Options +FollowSymLinks |
修改为:
1 |
Options +SymLinksIfOwnerMatch |
或者也可以直接注释掉这一行,这样再次访问就一切正常了。
当然,讨论还提到,如果你是Virtualmin虚拟主机的管理员,你可以直接使用以下命令替换将所有的FollowSymLinks替换为SymLinksIfOwnerMatch:
1 |
find /home -name ".htaccess" -type f -exec sed -i 's/FollowSymLinks/SymLinksIfOwnerMatch/g' {} ";" |
这样服务器上所有的Drupal站点都会被修复了。
评论