我在苦苦挣扎几天后终于解决了这个问题。以下是对我有效的方法:
首先,检查您的Apache error_log
文件,并查看最近的错误消息。
access to /mySite denied (filesystem path
'/Users/myusername/Sites/mySite') because search permissions
are missing on a component of the path
如果您遇到文件权限问题,您可以通过从终端运行以下命令来修复它们:
$ cd /Users/myusername/Sites/mySite
$ find . -type f -exec chmod 644 {} \;
$ find . -type d -exec chmod 755 {} \;
然后,刷新应该显示您网站的URL(例如http://localhost/mySite
)。
如果仍然出现403错误,并且您的Apache error_log
仍然显示相同的内容,则逐步向上移动目录树并在此过程中调整目录权限。 您可以通过终端执行以下操作:
$ cd ..
$ chmod 755 mySite
如果需要,继续进行以下步骤:
$ cd ..
$ chmod Sites
并且,如果必要的话,
$ cd ..
$ chmod myusername
不要继续向上移动。这可能会彻底破坏您的系统。
如果您仍然收到错误消息,表示路径中某个组件的搜索权限缺失,我不知道您应该怎么做。但是,我遇到了另一个错误(如下所示),我是这样解决的:
如果您的error_log
显示类似以下内容的信息:
client denied by server configuration:
/Users/myusername/Sites/mySite
如果您的问题不是文件权限问题,而是Apache配置问题。
请注意,在您的 httpd.conf
文件中,您将看到一个默认配置如下(Apache 2.4+):
<Directory />
AllowOverride none
Require all denied
</Directory>
或者像这样(Apache 2.2):
<Directory />
Order deny,allow
Deny from all
</Directory>
不要更改这个!我们将不会全局覆盖这些权限,而是在您的httpd-vhosts.conf
文件中覆盖。
然而,在此之前,请确保您的vhost Include
行在httpd.conf
中是取消注释的。它应该看起来像这样。(您的确切路径可能不同。)
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
现在,打开你刚刚 Include
的 httpd-vhosts.conf
文件。如果你还没有网页的条目,请添加一个。它应该看起来像这样。 DocumentRoot
和 Directory
路径应该相同,并且应该指向你的 index.html
或 index.php
文件所在的位置。对于我来说,那就是在 public
子目录中。
对于 Apache 2.2:
<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/Users/myusername/Sites/mySite/public"
ServerName mysite
# ErrorLog "logs/dummy-host2.example.com-error_log"
# CustomLog "logs/dummy-host2.example.com-access_log" common
<Directory "/Users/myusername/Sites/mySite/public">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
这几行话说:
AllowOverride All
Require all granted
这是Apache 2.4+的关键设置。如果没有这些设置,您将无法覆盖在 httpd.conf
中指定的默认Apache设置。请注意,如果您使用的是Apache 2.2,则这些行应该改为:
Order allow,deny
Allow from all
这个更改对于像我这样的谷歌用户来说是一个重要的困惑来源,因为复制和粘贴这些Apache 2.2行在Apache 2.4+中不起作用,在旧的帮助线程中仍然可以找到Apache 2.2行。
一旦您保存了更改,请重新启动Apache。此命令取决于您的操作系统和安装方式,如果需要帮助,请单独查找。
希望这能帮到其他人!
附注:如果您无法找到这些.conf
文件,请尝试运行find
命令,例如:$ find / -name httpd.conf