取消apache对.htaccess文件的限制

newfarhui 2020-01-12

问题
当访问一个站点的时候,报告“500 Internal Server Error”,查看/var/log/httpd/error_log,报告“/www/users/test.com/.htaccess: Options not allowed here”,或者报告“ErrorDocument not allowed here”等信息。

解决方案
这是由于客户在自己的网站的目录内放置了.htaccess文件。使用.htaccess文件,可以对网站目录的一些特性做子定义,如调整默认首页顺序、设置是否允许目录浏览、对网站目录做用户验证等功能进行定义。

而Prima系统所用的apache,出于虚拟主机的安全考虑,默认是禁止用户使用.htaccess文件对系统功能做自定义的。所以访问这个站点会出现500 Internal Server Error的错误,同时在/var/log/httpd/error_log中也会看到相应的报错。

比如报告“Options not allowed here”,则是用户在.htaccess文件中,使用了Options参数对自己的站点做了定义。所以我们需要在apache的配置中允许当前用户使用Options参数方可。如果报告“ErrorDocument not allowed here”,则是用户在.htaccess文件中使用了ErrorDocument参数。所以我们需要在apache的配置文件中,允许这个站点使用ErrorDocument参数方可。

解决方法有两种:

1) 取消.htaccess文件。

移动或者改名.htaccess文件。但是这样会造成一些特殊配置的丢失,可能影响站点的正常运行。

2) 登陆服务器,修改本站点的配置文件,允许用户使用.htaccess文件定义自己的站点。

vi /usr/prima/etc/httpd/virtual.conf

找到需要修改的站点,例如我们要修改test.com这个站点,可以找到如下一段配置:

<VirtualHost 192.168.0.100:80>
ServerName test.com
DocumentRoot /www/users/test.com
ServerAlias www.test.com
Action cgi-wrapper /cgiwrap/cgiwrap/user_oex0azf4
AddHandler cgi-wrapper .php .php4 .phtml
</VirtualHost>

上边是一个支持php站点的配置项。

加入要允许tesc.com这个站点使用Options参数,则在上边的配置中加入<Directory>和</Directory>一段,如下:

<VirtualHost 192.168.0.100:80>
ServerName test.com
DocumentRoot /www/users/test.com
ServerAlias www.test.com
Action cgi-wrapper /cgiwrap/cgiwrap/user_oex0azf4
AddHandler cgi-wrapper .php .php4 .phtml
<Directory /www/users/test.com>
Allowoverride Options
</Directory>
</VirtualHost>

请确认“Directory”参数后边的“/www/users/test.com”目录是当前要修改的站点的目录。

修改完成后保存文件并退出。重新启动apache服务:/etc/init.d/httpd restart ,即可。

如果要允许使用ErrorDocument,则把“Allowoverride Options”修改为“Allowoverride ErrorDocument”即可。

如果要设置同时允许多个,则可以写为“Allowoverride Options ErrorDocument”,中间用空格隔开。

注意:

1) Allowoverride参数必须被夹在<Directory>和</Directory>之间,否则无效。

2) 请不要对/www目录设置Allowoverride参数,一定要对单个站点目录做定义,否则会有安全隐患。

相关推荐