与Yosemite的Apache localhost 403错误

时间:2014-08-11 19:05:04

标签: macos apache 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"。我添加到主机文件的任何其他网站也会出现同样的情况。

我尝试在this post的帮助下配置用户目录。这个人MacRumors thread知道有一个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

任何人都可以提供任何建议或帮助吗?以下是我的hostshttpd.conf文件以及error logs的链接以供参考。

7 个答案:

答案 0 :(得分:80)

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

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.

Apache 2.4(OSX 10.10 Yosemite)与Apache {2.2}(OSX 10.9)的结构不同Directory directive in Module mod_authz_core

编辑: 如果您要从START设置Apache,请按照this instruction set在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>

Apache 2.4

<Directory "/Users/jnovack/Sites/">
  Options Indexes MultiViews
  AllowOverride All
  # OSX 10.10 / Apache 2.4
  Require all granted
</Directory>

答案 1 :(得分:45)

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

第250行(优胜美地)改变:

Options FollowSymLinks Multiviews

为:

Options FollowSymLinks Multiviews Indexes

然后在终端运行中:

sudo apachectl restart

答案 2 :(得分:29)

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

我完成的步骤:

sudo nano /etc/apache2/httpd.conf

取消注释以下行:

#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

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

sudo nano /etc/apache2/extra/httpd-userdir.conf

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

#Include /private/etc/apache2/users/*.conf
to
Include /private/etc/apache2/users/*.conf

保存并退出(Ctrl + X按Enter并按Y再按一次)。

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

cd /etc/apache2/users/

如果此文件夹中没有配置文件,请通过

创建一个
sudo nano /etc/apache2/users/<**YOUR USERNAME**>.conf

<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>

保存并退出

现在重启你的apache

sudo apachectl restart

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

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

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

open /Library/Webserver/Documents/

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

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

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

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

SymLinks

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

It works!

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

ln -s <Path_to_your_Project(index_file)> <Path_to_webroot>

例如,如果您的Documents文件夹中有项目文件夹,则通过

将webroot指向索引文件
ln -s /Users/<YOUR USERNAME>/Documents/project/ /Library/Webserver/documents/projectlink 

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

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

sudo nano /private/etc/apache2/httpd.conf

第250行(优胜美地)改变:

Options FollowSymLinks Multiviews

为:

Options FollowSymLinks Multiviews Indexes

然后在终端运行中:

sudo apachectl restart

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

快乐编码..

答案 3 :(得分:8)

this article中的建议帮助了我。

特别是&#34; Yosemite Only&#34;部分:

  

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

该部分是......

<Directory />
 AllowOverride none
 Require all denied
</Directory>

注意:

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

答案 4 :(得分:2)

有两种可能性导致您的localhost被禁止,首先可能是因为您的apache设置不正确,其次可能是因为您设置了vhost并且忘记了设置localhost也是

  1. sudo nano /etc/apache2/extra/httpd-vhosts.conf
  2. 添加此代码
  3. `

    <VirtualHost *:80>
         ServerName localhost
         DocumentRoot "/Users/username/Sites"
         <Directory "Users/username/Sites">
            Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all
         </Directory>
     </VirtualHost>  
    
    1. 保存并重新启动apache
    2. `

      sudo apachectl restart
      

      它应该是有效的:)

答案 5 :(得分:0)

建议可能会关注您自己在apache中的用户特定conf,但默认情况下可能根本不会加载此配置。

编辑userdir模块配置:

  

sudo vi /etc/apache2/extra/httpd-userdir.conf

取消注释用户目录配置文件的包含:

Include /private/etc/apache2/users/*.conf

确保根据我们自己的用户名进行用户目录配置:

  

sudo vi /etc/apache2/users/.conf

确保您的主目录配置良好:

DocumentRoot "/Users/<username>/Sites/" <Directory "/Users/<username>/Sites/"> AllowOverride All Options Indexes MultiViews FollowSymLinks Require all granted </Directory>

重启apache(网络服务器)

  

sudo apachectl restart

检查您的网站!

答案 6 :(得分:-3)

只需在用户文件夹中创建“Sites”文件夹即可。转到

cd〜
mkdir'网站'