使用 Apache 修复别名目录上的 403 Forbidden

Posted

技术标签:

【中文标题】使用 Apache 修复别名目录上的 403 Forbidden【英文标题】:Fixing 403 Forbidden on alias directory with Apache 【发布时间】:2011-10-12 01:08:45 【问题描述】:

我正在尝试设置一个别名来指向我的文件系统上的某个目录,而不是在 DocumentRoot 中。现在我得到一个 403 Forbidden 响应。这些是采取的步骤: 1.编辑http.conf,添加:

Alias /example "/Users/user/Documents/example"

那么……

<Directory "/Users/user/Documents/example">
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all</Directory>

2。在终端中使用 chmod 设置权限:

chmod 755 /Users/user/Documents/example

现在应该可以了吗?相反,我禁止访问。这是 error_log 的输出:

[Sun Jul 24 06:57:57 2011] [error] [client xx.xx.xx.xx] (13)Permission denied: access to /example denied

【问题讨论】:

您的 http.conf 中是否还有其他部分可以覆盖您在上面发布的内容?您的服务器上是否有不抛出 403 的 URL? 文档根目录下的任何内容都可以正常加载。我将别名目录的目录设置设置为与文档根目录相同。 你发现了吗?我遇到了完全相同的问题。 【参考方案1】:

快速解决方案:

在 Linux 上以 root 身份使用这些命令:

find /var/www -type d -exec chmod 755  \;
find /var/www -type f -exec chmod 644  \;

【讨论】:

【参考方案2】:

我不得不恢复我的 apache 配置文件,然后重新设置服务器。发现这很有用: https://apple.stackexchange.com/questions/41143/how-to-revert-default-mac-apache-install-to-original

【讨论】:

【参考方案3】:

这是为我解决的问题:

/etc/apache2/httpd.conf

<Directory />
    Options FollowSymLinks
    AllowOverride None

    # REMOVE THESE LINES
    #Order deny,allow
    #Deny from all

    # ADD THIS LINE
    Require all denied
</Directory>

此更改实现了在 apache update from 2.2 to 2.4 中所做的更改。 OSX Yosemite 更新带来了 apache 更新(PSA:如果您计划升级到 Yosemite,请为自己安排一周的时间来修复它所破坏的所有内容)。

奇怪的是我已经让 apache 2.4 工作了,突然又坏了....

PSA:如果您打算升级到优胜美地,请为自己安排一周的时间来修复所有损坏的问题

【讨论】:

听起来很疯狂,但您的代码修复了它! -> 已更改为 Yosemite 和 1. "Options FollowSymLinks" 丢失并且 2. 有旧的 apache 2.2 代码。刚刚添加了“要求所有授予”/“拒绝”,一切正常。 通常 OS X 更新将http.conf 重命名为http.con~previous,可以轻松恢复。尽管@edan 是对的,但仍然需要根据更新的 apache 进行一些修复。 This Require all grant/denied 是大多数教程中标准 httpd.conf 中缺少的一项。一旦我重新添加它,它就会再次工作。谢谢。【参考方案4】:

这些都是很好的答案。 它们都不适合我。

我在 OSX 服务器中指定了一个别名,指向一个用户目录。我花了很长时间 chmodding 和弄乱 _www 用户,递归地添加可执行权限,卸载 macports 和各种试图让它工作的东西。我试过777。不。不知道为什么它不起作用。

最后,我刚刚在 Finder 中选中了该文件夹的“共享文件夹”复选框,它在指定的域上工作,并且 php 以我想要的方式工作。 :/ ...所以这很容易。

【讨论】:

选中“共享文件夹”复选框对我有用。我还必须从我的虚拟主机配置中删除 Require local。 我花了一个小时来配置 apache,但都没有工作。但这完美无缺。谢谢!【参考方案5】:

经过大量时间浪费后,我解决了这个问题,我想分享一下以节省您的时间。

上面和其他帖子上的所有绅士在他们的答案中都有一些正确的部分,但下面是总和

在您的“/etc/apache2/httpd.conf”文件中:

1- 更改您的文档根目录

Original: DocumentRoot "/Library/WebServer/Documents"
Change to: DocumentRoot "/Users/yourname/www"

2-改变

原文:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

改为:

<Directory /Users/yourname/www>
    Options FollowSymLinks Includes ExecCGI
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

3- 改变:

原文:

<Directory "/Library/WebServer/Documents">

改为:

<Directory "/Users/yourname/www">

4- 最后,如果你是超级用户,你可能不需要这一步,这是在你的新根文件夹上设置正确的权限

chmod 755 /Users/yourname/www

希望这会有所帮助

【讨论】:

终于!非常感谢您的第二步!在 OS X 10.10.2 上运行良好。【参考方案6】:

最后一根稻草;)在目录条目中需要本地...

喜欢

<Directory "/Users/user/Documents/example">
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Require local
   Order allow,deny
   Allow from all
</Directory>

如果其他一切都不起作用(正确的别名、httpd.conf 中的目录条目和正确的 mod/usr/grp)。

请记住:如果您将网站放在用户空间中,则 apache 用户(运行 httpd)需要访问您的主页!

【讨论】:

家庭访问是我的问题。我们应该把静态文件夹放在哪里?【参考方案7】:

我在 OS X 上也遇到过这个问题。事实证明gliptak 是对的,但我还有一些细节要补充。

我们都在尝试为用户主文件夹下的文件夹配置虚拟目录;我认为这就是我们遇到问题的原因。就我而言,我有以下设置:

主文件夹是/Users/calrion。 虚拟目录文件夹是/Users/calrion/Path/to/www。 有一个符号链接/Users/calrion/Path 指向/Volumes/Other/Users/calrion/Path

问题在于用户和组 _www(Apache 在 OS X 上运行的方式)缺乏对 /Users/calrion/Volumes/Other/Users/calrion 的执行访问权限。

运行 chmod o+x /Users/calrionchmod o+x /Volumes/Other/Users/calrion 解决了这个问题(在 OS X 10.7.4 上)。

这里的规则是 Apache 需要对路径中的所有文件夹执行访问权限才能提供文件。没有这个,你会得到一个 HTTP 403(禁止)。

【讨论】:

@andi 你确定你有同样的问题吗?在 OS X 10.9 上出现此问题时,我收到 error_log 消息:“(13)Permission denied: access to /url/path/ denied (filesystem path '/Users/calrion/path/to/folder') 因为搜索权限路径的某个组件上缺少”。如果没有,也许可以问一个问题,您可以在其中提供有关正在发生的事情的更多详细信息。 @Calrion 它是由其他原因引起的。未正确配置 httpd.conf。我的错。 这对我来说非常有效。但是,有没有办法通过调整 httpd 配置而不是更改文件夹权限来解决这个问题? @Jun-DaiBates-Kobashigawa 尝试将AllowOverride 设置为none;这应该会阻止 Apache 寻找 .htaccessfiles,我认为这是 Apache 需要访问路径中所有目录的唯一原因。 对于 OS X 10.9 也必须这样做:wiki.apache.org/httpd/13PermissionDenied【参考方案8】:

SELinux 是我的罪魁祸首。如果您在 linux 机器上遇到此问题并且您的别名和文件权限是正确的,请尝试执行“setenforce 0”以将 SELinux 置于许可模式。这对我有用。

【讨论】:

【参考方案9】:

我只是遇到了同样的问题。我发现 SE_Linux 已启用,并且 Aliased 目录中文件的安全上下文不正确,缺少 httpd_sys_content_t。

您可以使用ls -Z 查看安全上下文。如果您的文件/文件夹没有 httpd_sys_content_t 那么 apache 将不会为它们提供服务!您可以使用chcon -R --type=httpd_sys_content_t /new_html_directory 之类的内容添加适当的上下文。这将更改目录中当前文件的上下文,但不会更改之后添加的任何文件(为此您需要使用 semanage)。您的另一个选择是将文件留在 /var/www 下。

【讨论】:

ls 没有 -Z 选项,我在 BSD Mac OS 中。我一直在使用 /Library/WebServer/Documents 目录,我假设与 linux 下的 /var/www 相同。当我有时间时,我将开始全新安装,可能会从源代码构建 apache。 我明白了。抱歉,我没有太多在 OS X 上运行 Apache 的经验,但如果您不必处理 SELinux,那么它必须只是权限。 OSX 上的 Apache 在我的机器上以 _www 运行。您是否已经授予 _www 访问您的 /Users/user/Documents/example 的权限?【参考方案10】:

检查/Users/user/Documents//Users/user/ 的权限(首先执行更高级别的权限...)

/bin/su 进入运行 Apache 的用户(如 www、www-data)和 cat 目录中的文件 /Users/user/Documents/example。这可能会指出您的设置存在权限问题。

【讨论】:

这是我以_www身份登录的命令:sudo -s -u _www(或者我应该说它不起作用,它立即告诉我,如果我没有父目录的权限从我要共享的文件夹中尝试过)。来自apple.stackexchange.com/questions/126302/… 但我认为这意味着从我的主目录共享 Web 文件可能不是一个安全的好习惯。必须想出一种不同的方法来测试在 ~/Documents 中的代码子目录中生成的 Web 文件。【参考方案11】:

确实看起来不错,请进行完整性检查。

你重启了 apache

检查组和用户所有权

我觉得引号可以去掉

/Users/user/Documents/example 中有什么内容?

试试 777

-肖恩

【讨论】:

我重新启动了 apache。我也更改了用户组 httpd 用户,www。和用户所有者到 www。我重新启动。我删除了引号,没有区别。我将 test.php 文件放在 /Users/user/Documents/example... 在文档根目录中,apache 可以毫无问题地访问该文件,所有权设置为 755,并且可以正常工作。 您有案例问题吗? /Users/user/Documents/example > /Users/User/Documents/Example

以上是关于使用 Apache 修复别名目录上的 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过 Windows 上的 Alias 向 Dropbox 文件夹上的 Apache 授予权限

Apache 服务器 2.4.9 错误号 403

虚拟主机中的 Apache HTTPD 别名和目录

升级到 Ubuntu 13.10 后,Apache 上的 laravel 项目出现 403 错误

Apache 尝试访问服务器上的“/”时出现 403 错误

apache 403 forbidden怎么解决