我是管理在 Debian 7.8 上运行的 Apache 2.4.9 Web 服务器的团队的一员。我们的一个用户网站遇到了问题:
www.example.com/~user
当我们尝试访问此 URL 时,将加载包含以下内容的页面:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请联系服务器管理员 webmaster@localhost 并告知他们错误发生的时间以及可能导致错误的任何操作。
有关此错误的更多信息可能在服务器错误日志中提供。Apache/2.2.22 (Debian) 服务器位于 www.cpdee.ufmg.br 端口 80
我/var/log/apache2/error.log
发现:
[Fri Apr 03 11:36:36 2015] [alert] [client 179.214.195.80] /home/web/user/.htaccess: Options not allowed here
如果我查看 /home/web/user/.htacces 文件的内容,就会发现只有这行配置:
Options -Indexes
经过快速研究,我发现这个问题与 Apache 的虚拟主机配置有关。具体来说,本教程说可以通过在 /etc/apache2/sites-enabled/000-default 的“AllowOverride”列表中添加“Options”来解决此问题,如下所示:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo Options
Order allow,deny
allow from all
</Directory>
此文件只是一个/etc/apache2/sites-available/default
文件链接,就我而言,此文件看起来有点混乱:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride Options
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride Options
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
根据建议,我将其添加Options
到AllowOverried
列表中(针对<Directory> ... </Directory>
我在那里找到的每个“标签”)。然后我启用了更改并使用以下一组命令重新加载了 Apache:
a2ensite default
/etc/init.d/apache2 reload
即使进行了这些更改,我仍然遇到同样的问题,我不知道到底出了什么问题。有人能帮我解决吗?
答案1
检查是否有更具体的配置userdir.conf
覆盖您在中指定的设置<Directory />
。在为 userdir/etc/apache2/mods-enabled/userdir.conf
指定的Directory
指令中,默认值为:
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>
所以你应该在这里添加Options
指令AllowOverride
。
(可能你的目录是<Directory /home/web/*/>
这样的。)