OSX El Capitan - Apache 403 Forbidden

17

我刚从Yosemite升级到El Capitan,但不幸忘记了复制我的旧httpd.conf文件,现在我需要重新配置所有的设置。

我已经将文档根目录更改为以前的/users/admin/www,并配置访问该文件夹的权限。

<Directory "/users/admin/www">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

重启了Apache,但即使这样,当尝试访问127.0.0.1时仍然出现“Forbidden”错误。

我错过了什么?

10个回答

73

请执行以下操作:

  • 打开终端
  • 输入以下命令:

    cd /etc/apache2/
    sudo mv httpd.conf httpd.conf.OLD
    sudo mv httpd.conf~previous httpd.conf
    sudo apachectl restart
    

在处理这个问题上花了3个小时后 - 这个方法对我很有效!


1
如果您使用全新的 Mac,请使用以下命令作为第三个命令:sudo mv httpd.conf.pre-update httpd.conf你真的,真的救了我的一天! - psimons
这个答案可能适用于大多数人,因为它解决了主要问题——你的httpd.conf文件现在不正确。然而,对我来说并没有起作用,但是这篇很棒的指南https://medium.com/@JohnFoderaro/how-to-set-up-apache-in-os-x-10-11-el-capitan-637b30fe67b1#.z0w006fdo 让我更新了我的httpd.conf到一个现在可以工作的地方。 - cconolly
这对我在2017年的MacBook上运行的10.14.6有效。我非常好奇你在这些命令中完成了什么。看起来你正在将httpd.conf恢复到以前的版本,但为什么会有效呢? - user1575778

18

我刚刚发现,在El Captain更新期间,旧的.conf文件被保存在以下文件夹中:

/private/etc/apache2/httpd.conf.pre-update

所以我只是将旧的定义复制到了新的文件中 :)


1
虽然被接受的答案可行且易于实现,但它并没有具体解决问题。恢复旧的Apache配置会回滚对El Captain进行的任何Apache配置更新...有点像用蜡烛修理坏掉的灯(以夸张的方式)。@jcfranco和Todd Hammer在下面提供了一些特别解决权限问题的答案。 - TheMadDeveloper

9
你可以导航到/private/etc/apache2/,然后执行diff httpd.conf httpd.conf.pre-update来查看你的旧配置文件和新添加的配置文件之间的差异。
对我而言,有很多LoadModules行被注释掉了,并且我的Apache用户/组已经改回了_www

5
我对于Apache 2.4的更改不太熟悉,这个问题让我困扰了大约30分钟。我刚从Mavericks升级到El Capitan(Apache 2.2到2.4),但是我无法加载我的个人Sites目录(http://localhost/~{username})。我一直收到“Forbidden”的错误提示。经过一番调查,我发现需要修改/etc/apache2/users/{username}.conf并添加“Require all granted”。由于我从未升级到使用Apache 2.4的Yosemite版本,所以我从未遇到过这个问题。
希望这些信息能帮助到别人。

太棒了,救了我的一天。如果你使用虚拟主机,请不要忘记在你的/etc/apache2/extras/httpd-vhosts.conf中添加这个定义;) - jpbourbon

4

更新目录访问控制对我有用:

在这个例子中,所有请求都被允许。

2.2配置:

Order allow,deny Allow from all

2.4配置:

Require all granted

来源:http://httpd.apache.org/docs/trunk/upgrading.html(Access control下)

注意:我将自定义设置分别保存在/private/etc/apache2/other/下。



2

正如 @delphirules 所说,您可以像这样复制旧的 httpd.conf 文件:

sudo cp /etc/apache2/httpd.conf.pre-update /etc/apache2/httpd.conf

我一整天都无法连接本地主机,但最终找到了这个解决方法:https://mallinson.ca/web-development-with-el-capitan/。只需要运行复制命令,然后执行sudo apachectl restart
我还在恢复模式下禁用了 SIP(系统完整性保护),但我不知道它是否真的有用。您可以在这里找到相关指令:https://forums.developer.apple.com/thread/3981

0
如果您在DocumentRoot目录中有指向某些项目的符号链接,在升级到El Capitan后,这些项目可能会出现403错误,就像我一样。 您需要以下内容才能使它们再次正常工作:
1)您的apache用户(默认为 _www)应该对包含您链接到的目录的目录具有执行访问权限。 在我的情况下,在apache DocumentRoot中,我有:
MyProject -> /Users/Me/Documents/Aptana Studio 3 Workspace/MyProject

由于某种原因,/Users/Me/Documents/Aptana Studio 3 Workspace/MyProject 的访问设置为 -rw------- 1 Me staff。我猜测这是在 OS X 升级期间设置的。所以执行 sudo chmod 755 Aptana\ Studio\ 3\ Workspace 后错误得到解决。

2) 由于升级还更改了 httpd.conf,请确保您拥有 DocumentRoot 目录,或者像上面建议的那样从备份中恢复 httpd.conf:

Options Indexes FollowSymLinks

如果您从Mavericks或更早版本的OS X升级并恢复了备份httpd.conf,则应按照jcfranko所说,将请求允许的Apache 2.2设置替换为:
Require all granted

0
在您的/Users/{用户名}/Sites文件夹中创建符号链接。
ln -s /Path/To/Target/Files /Users/{user name}/Sites/{name}

0

我曾经遇到过类似的问题,当我升级到El Capitan后,在用户级别启用站点服务后,尝试访问本地站点目录中的页面时,收到了404错误。问题在于Apache将httpd.conf文件重置为其默认值,禁用了用户文件夹以从中加载文件。因此,http://localhost可以正常加载,但http://localhost/~username/index.html无法加载。以下是解决方法:

备份“新”配置文件:

sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf_capitan

恢复被重命名的“旧”配置文件:

sudo cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接