问题描述
我知道这个问题很多,但我看到的解决方案对我不起作用。
我只启用了一个虚拟主机,并且我正在尝试启用对不在文档根目录下的文件夹的访问
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /movies /home/username/Videos/Movies
<Directory /home/username/Videos/Movies/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
我按如下方式设置了/etc/apache2/envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public
我确保/home /username /Videos /和它的子floders由username:public
拥有,将权限设置为777(775之后不起作用)并确保用户www-data
属于组public
。
现在,当我进入localhost/movies
时,我得到了
[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path
但是当我将/etc/apache2/envvars
设置为在username
(我自己的用户名)下运行Apache时,一切正常。问题是权限相关,但我不知道在我的情况下,特别是当我将权限设置为777
时。有任何想法吗?
附: Ubuntu版本是14.04,Apache是2.4.7,我没有编辑其他配置文件。
最佳解决思路
在您的用户目录上执行chmod +x
,然后重新启动apache。 755权限应该工作。我遇到了644问题。
次佳解决思路
如果selinux是问题,而不是仅仅禁用它,this page和this page给出命令来授予访问权限:
chcon -R -t httpd_sys_content_t ~/public_html/
第三种解决思路
您可能启用了selinux。尝试
getenforce
如果显示”Enforcing”,请尝试
setenforce 0
并尝试,如果这可以解决您的问题。
第四种思路
我遇到了同样的问题,经过几个小时的尝试,我发现一个解决方案正好解决了这个问题:
https://wiki.apache.org/httpd/13PermissionDenied
基本上,Apache服务器不仅需要它所服务的所有文件的读取权限,还需要虚拟主机路径中所有目录的执行权限。
实用程序名称可用于通过列出路径的每个组件的权限来帮助查找权限问题:
namei -m /usr/local/apache2/htdocs/foo/bar.html
在我的情况下,我的路径中的目录具有权限700,它会导致问题。将其更改为701后,问题就解决了。