Apache 无法访问我的主目录中的文件夹

Enr*_*ent 38 apache2

我已将 Apache 的配置更改为指向我的主目录中的一个文件夹:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我什至给了我/home/dbugger/html777 的许可。但我仍然收到相同的错误消息http://localhost:“403 Forbidden”

我错过了什么?

小智 29

这对我有用

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

重要的一点是改变

Order allow, deny
Run Code Online (Sandbox Code Playgroud)

Require all granted 
Run Code Online (Sandbox Code Playgroud)

  • 在您的 *root* 目录上将 `AllowOverride` 设置为 `All` 充其量是鲁莽的!有关详细信息,请参阅 http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride。 (11认同)
  • 不,授予对整个根的访问权限从来都不是一个好主意! (8认同)
  • 我冒昧地查找“要求所有授予”是什么,发现它是从 apache 2.4 开始的“全部允许”的“新等价物” - http://serverfault.com/questions/549517/what-does -apaches-require-all-granted-really-do (3认同)

小智 24

启用userdir模块:

sudo a2enmod userdir 
Run Code Online (Sandbox Code Playgroud)

在用户目录中启用 PHP 执行:

sudo nano /etc/apache2/mods-available/php5.conf  
Run Code Online (Sandbox Code Playgroud)

(或者如果使用 php7.0,例如)

sudo nano /etc/apache2/mods-available/php7.0.conf
Run Code Online (Sandbox Code Playgroud)

注释这部分(放在#每一行的开头):

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>
Run Code Online (Sandbox Code Playgroud)

Ctrl+X保存

启用目录列表:

sudo nano /etc/apache2/apache2.conf
Run Code Online (Sandbox Code Playgroud)

添加这个:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

Ctrl+X保存


重启 apache(sudo这里也需要):

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

现在将您的 php 文件放在/home/yourname/public_html目录中,然后
http://localhost/~yourname从您的网络浏览器转到。


Eri*_*lho 15

Apache 以用户身份运行www-data。如果它在您的家中没有执行权限,则 apache 将无法读取任何文件。

将您家的组更改为www-data

chgrp www-data /home/dbugger
Run Code Online (Sandbox Code Playgroud)

并授予它仅遍历您的主目录的权限:

chmod g+x /home/dbugger
Run Code Online (Sandbox Code Playgroud)

您还可以限制以下权限/home/dbugger/html

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Run Code Online (Sandbox Code Playgroud)