与Yosemite的Apache localhost 403错误

Zac*_*ter 46 apache macos http-status-code-403

我刚刚安装了Mac OS X Yosemite.我将Apache和chmodded"users/user/Sites"配置为755.当我点击localhost时,我收到403 Forbidden "You don't have permission to access / on this server".我添加到主机文件的任何其他站点都会出现同样的情况.

我尝试按照这篇文章的帮助配置用户目录.这个MacRumors线程的人知道有一个Apache问题,但没有提供很多建议.

我的目录权限如下所示

drwxr-xr-x  29 root             wheel  1054 Aug 11 07:30 /
drwxr-xr-x   6 root             admin   204 Aug 11 07:29 /Users/
drwxr-xr-x+ 26 zachshallbetter  staff   884 Aug 11 11:57 /Users/zachshallbetter/
 0: group:everyone deny delete
drwxr-xr-x   5 zachshallbetter  staff   170 Aug 11 10:16 /Users/zachshallbetter/Sites
Run Code Online (Sandbox Code Playgroud)

有人可以提供任何建议或帮助吗?以下是我的主机httpd.conf文件的链接以及错误日志以供参考.

jno*_*ack 80

您不希望将整个硬盘驱动器打开到Web服务器进程.事实上,第215-217行httpd.conf说:

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
Run Code Online (Sandbox Code Playgroud)

Apache 2.4(OSX 10.10 Yosemite)与模块mod_authz_core中Directory指令具有不同于Apache 2.2(OSX 10.9)的结构.

编辑: 如果您从START设置Apache,请按照此指令集在OSX 10.10 Yosemite上设置apache和php.

假设您已经mod_userdir.so启用,您的问题在您的用户.conf文件(/etc/apache2/users/username.conf)中,编辑(或添加)以下内容.

Apache 2.2:

<Directory "/Users/jnovack/Sites/">
  Options Indexes MultiViews
  AllowOverride All
  # OSX 10.9 / Apache 2.2
  Order from deny, allow
</Directory>
Run Code Online (Sandbox Code Playgroud)

Apache 2.4

<Directory "/Users/jnovack/Sites/">
  Options Indexes MultiViews
  AllowOverride All
  # OSX 10.10 / Apache 2.4
  Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您将此添加到讨论中.我编辑了我的回答,建议人们继续阅读其他答案以获取安全细节. (2认同)

tom*_*von 45

编辑文件:/private/etc/apache2/httpd.conf

在250号线(在优胜美地)改变:

Options FollowSymLinks Multiviews
Run Code Online (Sandbox Code Playgroud)

至:

Options FollowSymLinks Multiviews Indexes
Run Code Online (Sandbox Code Playgroud)

然后在终端运行:

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

  • 如果您的文档为空,则需要添加"索引"以显示文件和文件夹列表. (3认同)
  • 对于El Capitan btw来说,这也是一样的. (3认同)

mah*_*ahi 29

这可能是非常晚的答案,但我确实遵循了大部分的Stack Overflow解决方案,由于各种原因,他们都没有帮助我.所以我确实将我的设备重置为一个新的Yosemite操作系统,让这个本地主机在Mac Yosemite上运行(也有Symlinks),

我完成的步骤:

sudo nano /etc/apache2/httpd.conf
Run Code Online (Sandbox Code Playgroud)

取消注释以下行:

#LoadModule php5_module libexec/apache2/libphp5.so
to
LoadModule php5_module libexec/apache2/libphp5.so


#LoadModule userdir_module libexec/apache2/mod_userdir.so
to
LoadModule userdir_module libexec/apache2/mod_userdir.so


#Include /private/etc/apache2/extra/httpd-userdir.conf
to
Include /private/etc/apache2/extra/httpd-userdir.conf
Run Code Online (Sandbox Code Playgroud)

保存并退出(Ctrl + X按Enter键并按Y键再次输入)

sudo nano /etc/apache2/extra/httpd-userdir.conf
Run Code Online (Sandbox Code Playgroud)

并在第16行取消注释以下行:

#Include /private/etc/apache2/users/*.conf
to
Include /private/etc/apache2/users/*.conf
Run Code Online (Sandbox Code Playgroud)

保存并退出(Ctrl + X按Enter键并按Y键再次输入).

现在转到apache Users文件夹检查配置文件是否存在

cd /etc/apache2/users/
Run Code Online (Sandbox Code Playgroud)

如果此文件夹中没有配置文件,请创建一个

sudo nano /etc/apache2/users/<**YOUR USERNAME**>.conf
Run Code Online (Sandbox Code Playgroud)

替换<YOUR USERNAME>为您的机器名称(键入whoami终端并输入该名称).

创建.conf文件后,将下面的行复制到该文件中

<Directory "/Users/<YOUR USERNAME>/Sites/">
    AddLanguage en .en
    LanguagePriority en fr de
    ForceLanguagePriority Fallback
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from localhost
     Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

保存并退出

现在重启你的apache

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

现在转到您的浏览器并键入localhost,它应该按预期工作,

就像一个注意:如果尝试重新启动计算机后它仍然无效

将index.html创建为index.html.en,您可以在此处找到:

open /Library/Webserver/Documents/
Run Code Online (Sandbox Code Playgroud)

右键单击index.html.en并将其复制到index.html,保留原始状态

在浏览器中再试一次,如果成功,则可以删除重复的文件

为了清楚起见,将原始文件保留在原始文件index.html.en中,在此步骤中不受影响且不受伤害.

不知道为什么我不得不采取这个神秘的绕道 - 可能是我的机器本地的东西,但如果你按照上面的指南后遇到麻烦,看看它是否有帮助.

SymLinks:

如果你有成功,你应该在浏览器中看到

It works!
Run Code Online (Sandbox Code Playgroud)

现在为您的任何项目创建符号链接.

ln -s <Path_to_your_Project(index_file)> <Path_to_webroot>
Run Code Online (Sandbox Code Playgroud)

例如,如果您的Documents文件夹中有项目文件夹,则将webroot指向您的索引文件

ln -s /Users/<YOUR USERNAME>/Documents/project/ /Library/Webserver/documents/projectlink 
Run Code Online (Sandbox Code Playgroud)

您可能需要创建符号链接的权限(使用上面的命令与Sudo)

配置apache以遵循符号链接(感谢tomvon,我没有足够的分数来投票给你)

sudo nano /private/etc/apache2/httpd.conf
Run Code Online (Sandbox Code Playgroud)

在250号线(在优胜美地)改变:

Options FollowSymLinks Multiviews
Run Code Online (Sandbox Code Playgroud)

至:

Options FollowSymLinks Multiviews Indexes
Run Code Online (Sandbox Code Playgroud)

然后在终端运行:

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

现在转到localhost/projectlink查看您的项目索引文件是否显示在浏览器上.

快乐编码..

  • 谢谢!它在Mac OS Sierra上运行良好.就我而言,我错过了这一行:#Include /private/etc/apache2/extra/httpd-userdir.conf to Include /private/etc/apache2/extra/httpd-userdir.conf (2认同)

jod*_*ate 8

本文中的建议对我有所帮助.

特别是"Yosemite Only"部分:

首先,有一个指令通过默认拒绝访问整个文件系统来帮助保护您的计算机.我将向您展示如何删除此指令,因为我发现在用于开发的机器上更容易.代码部分从第220行到第223行.您可以注释掉(在每行前面放置'#')或只删除此部分.

那节是......

<Directory />
 AllowOverride none
 Require all denied
</Directory>
Run Code Online (Sandbox Code Playgroud)

注意:

正如其他人对此进行了详细介绍,上述方法可能不安全.