![我不明白为什么我会收到权限错误](https://linux22.com/image/1003472/%E6%88%91%E4%B8%8D%E6%98%8E%E7%99%BD%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BC%9A%E6%94%B6%E5%88%B0%E6%9D%83%E9%99%90%E9%94%99%E8%AF%AF.png)
Apache/2.4.18 (Ubuntu)
Ubuntu 16.04
我测试了初始配置,将浏览器指向服务器,并获得了正常的 ubunutu 页面。工作正常。
000-default.conf 是:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
index.html 位于 /var/www/html 目录中,并且 /var/www/html 目录的权限设置为 0755
我创建了一个目录 /home/utils/rails/public,拥有用户 utils。我将此目录的权限设置为 0755
我将文件 index.html 从 /var/www/html 复制到 /home/utils/rails/public
然后我将 /etc/apache2/sites-available/000-default.conf 修改为以下内容:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/utils/rails/public
</VirtualHost>
我重新启动了 apache2,并将浏览器指向该位置,但这次我得到了
Forbidden
You don't have permission to access / on this server
如果我逆转该过程并将 DocumentRoot 改回 /var/www/html,则一切都正常运行。
我究竟做错了什么?
namei -lx /home/utils/rails/public
f: /home/utils/rails/public
Drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x utils utils utils
drwxrwxr-x utils utils rails
drwxr-xr-x utils utils public
答案1
以下内容解决了该问题:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName myserver.net
DocumentRoot "/home/utils/rails/public"
<Directory "/home/utils/rails/public">
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
AllowOverride None
Require all granted
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/myserver.net_error.log
CustomLog ${APACHE_LOG_DIR}/myserver.net_access.log combined
</VirtualHost>
关键是:
Require all granted
这是从 Apache 2.4 开始使用的。其他指令不是访问问题的关键,但我用它们来禁止 .htaccess 指令(允许覆盖)并处理多视图
将权限设置为 0755 有效,不需要更改