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)
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)
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查看您的项目索引文件是否显示在浏览器上.
快乐编码..
本文中的建议对我有所帮助.
特别是"Yosemite Only"部分:
首先,有一个指令通过默认拒绝访问整个文件系统来帮助保护您的计算机.我将向您展示如何删除此指令,因为我发现在用于开发的机器上更容易.代码部分从第220行到第223行.您可以注释掉(在每行前面放置'#')或只删除此部分.
那节是......
<Directory />
AllowOverride none
Require all denied
</Directory>
Run Code Online (Sandbox Code Playgroud)
注意:
正如其他人对此进行了详细介绍,上述方法可能不安全.