我觉得这是一个相当简单的修复方法,在搜索时也看到过类似的问题,但无法用这些解决方案修复它。基本上,问题是我无法访问我的网络服务器上的任何子目录。转到 localhost 可以正常显示索引。但转到 localhost/test 会出现 403 Forbidden 错误。
我正在运行 CentOS。我尝试过几种方法编辑 /etc/httpd/conf/httpd.conf 文件,但都没有成功。DocumentRoot 位于 /var/www/html。目前我有:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
我尝试添加以下内容:
<Directory "/var/www/html/test">
Order allow,deny
Allow from all
</Directory>
但它仍然给我 403 禁止错误。
答案1
您不需要特别允许访问已在 httpd.conf 中配置的目录
由于 /var/www/html 配置了“AllowOverride None”,因此问题不是由于 .htaccess 文件改变了访问权限。
剩下的唯一原因是文件和目录的权限不允许 Web 服务器 uid 从此目录读取。它们是什么以及应该是什么取决于您的安全模型。但作为快速修复,您可以尝试:
# chmod a+rx /var/www/html/test
# chmod a+r /var/www/html/*
如果这解决了问题,那么请花时间将文件的所有权和权限修复为更合适的内容。
答案2
通常我建议先查看 http error_log 以查看具体的问题。
使用默认配置您应该能够访问 workshop-5.4 目录:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
如果您仍然无法访问目录,那么一切都指向目录权限,在这种情况下我建议尝试:
chown -R apache.apache /var/www/html # Assuming apache as default User
chmod -R 755 /var/www/html # Making sure all users can read and execute
在单独的终端上运行以下命令:
apachectl configtest && apachectl restart
tail -f /etc/httpd/logs/error_log # Assuming default error_log location
尝试添加一个简单的 html 文件,如(example.html):
<html>
<head><body>It works!</body></head>
</html>
最后,重新加载页面,尝试加载 example.html 并查看输出尾巴命令。
答案3
注释这些<Directory>
指令并简单设置DocumentRoot /var/www/html
并chown -R apache:apache /var/www/html
重新启动httpd
。
该<Directory>
指令应用于将一组指令应用于特定的文件系统目录(即更改权限),因此您通常希望在中使用它<VirtualHost>
。
答案4
还有一种情况,评论中提到目录被复制了,其中包含文件。
那里可能有一个 .htaccess 文件,其配置导致了 403。
在 Unix 中,名称以点“.”开头的文件是隐藏的,以显示它们的用途ls -a
。
文档在这里:https://httpd.apache.org/docs/current/howto/htaccess.html