我在 Mac OS X 10.6 上的“系统偏好设置”中设置了 Web 共享,并点击了它提供的链接。不幸的是,Apache 给了我这个 403 错误:
禁止
您无权访问此服务器上的 /~myusername/index.html。
访问日志显示:10.0.1.2 - - [30/Jun/2010:16:25:15 -0700] "GET /~myusername/ HTTP/1.1" 403 210
错误日志显示:[Wed Jun 30 16:26:09 2010] [error] [client 10.0.1.2] client denied by server configuration: /Users/myusername/Sites/
奇怪的是,访问http://本地主机运行良好。只有两个用户文件夹出现了问题,另一个用户文件夹(比我的系统升级更新)运行良好。
我以前在 Leopard 的机器上也遇到过这种情况,所以我把所有东西都改成了~/Sites
755,但没什么用。有什么建议吗?我猜是我对机器做了什么导致了这种情况,因为我无法想象 Apple 会搞砸这样的事情。
我确实设置了 PEAR这些说明,但我不知道这是否是造成这种情况的原因。
答案1
Apple 有针对此问题的支持文档。修复此问题需要创建一个文件/etc/apache2/users/yourusername.conf
(您的用户名成为账户简称,例如danielbeck
– 它通常是您的主文件夹的名称/Users
),其中包含以下内容:
<Directory "/Users/yourusername/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
之后,运行sudo chown root:wheel /etc/apache2/users/yourusername.conf
并重新启动 Apache。
答案2
要使 Apache 能够看到该文件,运行 Apache 的用户(可能是www
或_www
)必须有权访问这些用户的站点目录。仅具有 的内容的读取/执行权限~/Sites
是不够的,因为必须允许它从/
向下遍历到 的路径~/Sites
。因此,请确保/
、/Users
、/Users/myusername
和/Users/myusername/Sites
都至少具有a+x
权限(目录上的 eXecute 位允许该用户类遍历目录,即使不允许读取访问权限)。
ls -lde / /Users/ /Users/myusername/ /Users/myusername/Sites
如果任何目录没有显示最后一x
组(“其他”组),则使用类似的方法chmod a+x ...
为该目录进行设置。
如果任何目录的 ACL 显示用户www
被明确拒绝访问,则使用适当的参数来chmod
修复 ACL。
答案3
作为参考,我刚刚处理过这个问题,但这里的答案都不适用于我的具体情况。我正在配置虚拟主机,但更重要的是,我需要我的 htaccess 文件真正起作用。
我在 /etc/apache2/users/USERNAME.conf 文件中将“AllowOverride None”更改为“AllowOverride All”,并且我的所有站点都开始被禁止。
我将其改回来,然后在我的 httpd-vhosts.conf 文件内仅为一个站点进行更改,并且只有该站点被禁止。
查看日志后,发现问题出在 URL 重写和缺少 FollowSymLinks,于是我返回到 USERNAME.conf 文件。我将“AllowOverride None”切换为“AllowOverride All”,并在下一行添加“Options +FollowSymLinks”。
一切开始正常运转。我以前在 Windows 上使用过 xampp,它已经为像我这样的新手在服务器范围内设置了很多这样的设置。
答案4
2011 年 10 月 Lion 更新后,我还必须添加
UserDir 已启用,因此我的 /etc/apache2/extra/httpd-userdir.conf 如下所示:
UserDir enabled
UserDir Sites
#
# Users might not be in /Users/*/Sites, so use user-specific config files.
#
Include /private/etc/apache2/users/*.conf
<IfModule bonjour_module>
RegisterUserSite customized-users
</IfModule>