当我访问http://本地主机/我得到 403 Forbidden,但如果我访问http://localhost/~用户名它提供页面。我尝试过的事情:
- 检查错误日志
- 与原始 httpd conf 文件交换
- 将 DocumentRoot 更改为我的用户目录(毕竟如果我可以访问的话这应该可以工作
~username
)
我看过 30 多个问答网站,它们都指出人们遇到了用户目录被禁止的问题。我遇到了相反的问题,所以我在这里绞尽脑汁。
答案1
我今天确实遇到了同样的问题(至少症状相同)。就我而言,我查看了/var/log/apache2/error_log
一堆错误,如下所示:
[Mon Mar 19 15:30:30 2012] [error] [client ::1] Directory index forbidden by Options directive: /var/empty/
然后我看了一下/etc/apache2/httpd.conf
,看到了这两行……
<IfDefine MACOSXSERVER>
DocumentRoot /var/empty
...然后是这些行...
<IfDefine !MACOSXSERVER>
<IfDefine WEBSHARING_ON>
# Some comments were here
DocumentRoot "/Library/WebServer/Documents"
…所以我认为这在某种程度上MACOSXSERVER
被定义了,但它不应该被定义,因为这台机器是不是一台服务器。然后我想起我需要在这台机器上安装 Lion Server Admin 工具,而 Apple 的文档告诉我要这样做,就是在我的管理机器上安装来自 Mac App Store 的 Lion Server 软件包,尽管这台机器并不是一台服务器。所以也许这实际上/意外地将我的管理机器变成了 Mac OS X Server 机器。为了再次检查,我运行了:
$sw_vers 产品名称:Mac OS X Server 产品版本:10.7.3 版本:11D50
果然,我的机器现在将自己报告为 Mac OS X Server,尽管我所想做的只是将服务器管理工具放到这台机器上。
回到 Apache 问题,我最终找到了/etc/apache2/ReadMe.txt
,其中解释了那些特定于 Mac OS X 的 Apache 定义(请务必自己阅读以获取更多有用信息!),然后它说:
这些 IfDefine 设置 - MACOSXSERVER、WEBSHARING_ON、WEBSERVICE_ON - 由 Apache 的 launchd plist 设置或不设置,该 plist 位于 /System/Library/LaunchDaemons/org.apache.httpd.plist。
因此,就我而言,我选择通过编辑launchd
plist
Apache 以将其更改为未定义来修复它MACOSXSERVER
,因为我并不真正将我的机器视为服务器,并且我想从系统偏好设置的共享面板中的 Web 共享复选框来控制这些内容,而不是从 Server.app。
因此,我编辑了这个文件:
/System/Library/LaunchDaemons/org.apache.httpd.plist
要删除或注释掉数组中的这些行ProgramArguments
:
<string>-D</string>
<string>MACOSXSERVER</string>
我选择通过在它们之前和之后放置 SGML 注释开始/结束标记来注释掉它们,如下所示:
<!--
<string>-D</string>
<string>MACOSXSERVER</string>
-->
保存对该plist
文件的更改后,我正常重新启动了 Apache:
sudo apachectl graceful
...一切都变得更好了!
如果我的浏览器缓存了我试图访问的页面的“403 禁止”结果,我可能需要在浏览器中重新加载该页面一两次。
即使这不是您问题的根源,我希望我的故事能帮助您弄清楚您的情况。