解决方案一:

解决方案一:

我正在尝试在我的 Kubuntu 13.04 笔记本电脑上设置 apache 服务器。我已经安装了 apache2 包sudo a2enmod userdir; sudo service apache2 restart,但是当我访问 时http://localhost/~user,它仍然显示如下内容:

Forbidden

You don't have permission to access /~user on this server.

Apache/2.2.22 (Ubuntu) Server at localhost Port 80

的结果tail /var/log/apache2/access.log

127.0.0.1 - - [02/Aug/2013:16:22:01 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:16:22:02 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /~kaiyin HTTP/1.1" 403 501 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:36:26 +0200] "GET /favicon.ico HTTP/1.1" 404 499 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:36:26 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /~kaiyin HTTP/1.1" 403 501 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"

的结果tail /var/log/apache2/error.log

[Fri Aug 02 21:05:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:05:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:54 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:54 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /~kaiyin denied
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /~kaiyin denied
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico

答案1

这些public_html目录需要具有如下权限,以便运行 Apache 的用户可以访问它:

$ chmod -R 755 ~/public_html

还是不行?

如果您查看 Apache 错误日志,您可能会看到如下行:

[Fri Aug 02 21:06:59 2013] [错误] [客户端 127.0.0.1] (13)权限被拒绝:访问 /~kaiyin 被拒绝

这表明 Apache 没有权限导航到本示例中的用户目录 (~kaiyin)。

如何解决这个问题?

您需要确保为 Apache 所属的组设置读取 + 执行位,或者在用户目录上设置其他读取 + 执行位,以便 Apache 可以访问public_html下面的文件夹。

例子

/home
|-- [drwxr-x---]  /home/sam

/home/sam
|-- [drwxr-xr-x]  /home/sam/public_html

参考

答案2

<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root

  <Directory /home/*/public_html>
    AllowOverride All
    Options MultiViews Indexes SymLinksIfOwnerMatch
    <Limit GET POST OPTIONS>
      # Apache <= 2.2:
      #Order allow,deny
      #Allow from all

      # Apache >= 2.4:
      Require all granted
    </Limit>
    <LimitExcept GET POST OPTIONS>
      # Apache <= 2.2:
      #Order deny,allow
      #Deny from all

      # Apache >= 2.4:
      Require all denied
    </LimitExcept>
  </Directory>
</IfModule>

确保您在 中的设置正确/etc/apache2/mods-enabled/userdir.conf。在 chmodding 我的 public_html 后,我的权限被拒绝,然后决定检查userdir.conf.我注意到有针对早期 apache 版本和更新版本的设置。我知道我正在运行最新版本,因此启用了较新的设置,现在一切正常

答案3

您还可以使用/etc/hosts文件来消除临时 URL 的需要。如果主题或插件(如果有的话)中有完整 URL 的引用,则该网站将不会以正确的格式显示内容。

答案4

很可能文件夹没有 search( x) 权限或文件没有 read( r) 权限

namei -ml /home/joe/public_html/index.html

f: /home/joe/public_html/index.html
drwxr-xr-x root  root  /
drwxr-xr-x root  root  home
drwxr-x--- joe joe joe
drwxrwxr-x joe joe public_html
-rwxr-xr-x joe joe index.html

Apache 需要搜索并读取从根目录 ( /) 开始的所有文件夹index.html(即必须具有r&x权限)。如果您从上面注意到,/home/joe不允许other用户阅读 ( r) 或搜索 ( x)。

解决方案一:

将 apache2 用户(在我的例子中www-data)添加到登录的用户组中。通过这种方式www-data可以访问用户的所有内容/home/joe

就我而言,apache2 在名为 的用户下运行www-data。所以我们需要将www-data用户添加到组中joe

adduser www-data joe

此外,下面的所有文件都public_html必须具有rx该组的权限。

chmod -R g+rw /home/joe/public_html

这不太安全,因为/home/joeapache 服务器可以访问下面的任何文件。如果 apache2 admin 不小心将配置更改为 accesssome_private_folder而不是public_html,其他人可以轻松访问这些。

解决方案2:

允许任意other搜索( x)/home/joe

chmod o+x /home/joe

此外,下面的所有文件都public_html必须具有访问others权限rx

chmod -R o+rw /home/joe/public_html

相关内容