【问题标题】:Apache permission deniedApache 权限被拒绝
【发布时间】:2012-08-13 02:46:24
【问题描述】:

我刚刚安装了一个新的 Apache 2.4.2,在 windows 上构建了 Php fast cgi。

然后我修改了 httpd.conf 添加以下内容:

LoadModule fcgid_module modules/mod_fcgid.so  
FcgidInitialEnv PHPRC "C:/SITE/PHP"
AddHandler fcgid-script .php
FcgidWrapper "C:/SITE/PHP/php-cgi.exe" .php

DocumentRoot "C:/SITE/localhost/www"
<Directory "C:/SITE/localhost/www">
    Order allow,deny
    Allow from all
</Directory>

但是,当我尝试打开我的网站时,它显示:

Forbidden You don't have permission to access / on this server.

任何想法可能是什么问题?

【问题讨论】:

  • index.php的权限是什么?
  • 好吧,老实说,我不知道。上面的行不是应该允许所有文件吗?对于向服务器发出的任何请求,我都会得到相同的答复:例如 http://127.0.0.1/asdasdasd - 结果相同。
  • 否...允许/拒绝是 apache 是否向客户端提供资源的指令 - 但 apache 仍需要访问权限才能读取文件。将 apache 视为您计算机上的用户...如果您不授予它访问文件的权限,那么它就无法为它们提供服务。
  • 啊哈,我现在明白了。我想知道,我怎样才能给 apache 足够的权限呢?它是否受到某些配置或 Windows 本身的限制?有没有办法找出/解决这个问题?我会很感激一些建议。
  • 嗯,马上想到的一点是您的&lt;Directory&gt; 部分至少缺少一个关键指令——您需要在其中添加一个Options ExecCGI 指令。您还应该添加一个显式的AllowOverride all(或none)指令。 OrderAllow 也已弃用 - 如果您使用 2.4.x,则应使用 mod_authz_host 提供的新 Require 指令

标签: php apache permissions httpd.conf


【解决方案1】:

这是正确的做法:(感谢 DaveRandom)

<Directory "C:/SITE/localhost/www">
    Options ExecCGI
    AllowOverride all
    Require all granted
</Directory>

Dave Random 进一步解释:

在对此进行了一些实验后,我发现了使之成为正确答案的细微差别,这是特定于 Apache 2.3+ 的。似乎mod_authz_host 指令优先于mod_access_compat 指令,并且在目录树中一直冒泡。这意味着,如果您从 Apache 2.2 迁移到 Apache 2.4,并且逐字使用您的 2.2 httpd.conf,它将起作用。

但是,如果您执行 2.4 的新安装并将您的配置基于默认的 2.4 httpd.confAllow 指令将不起作用,因为默认顶级部分使用 Require all denied 指令而不是 @ 987654330@,这优先于树上更高的任何后续Allow 指令。总而言之,如果您将 Order/Allow/Deny 指令迁移到其等效的 Requires 中,那么您必须尝试所有这些指令,否则您会发现您得到了您没有预料到的 403。

【讨论】:

  • 在对此进行了一些实验后,我发现了使它成为正确答案的细微差别,这是特定于 Apache 2.3+ 的。似乎 mod_authz_host 指令优先于 mod_access_compat 指令,并且这会在目录树中一直冒泡。这意味着,如果您从 Apache 2.2 迁移到 Apache 2.4,并且逐字使用 2.2 httpd.conf,它将起作用。 [在下一条评论中继续]
  • 但是,如果您执行 2.4 的新安装并将您的配置基于默认的 2.4 httpd.conf,Allow 指令将不起作用,因为默认的顶级 &lt;Directory /&gt; 部分使用Require all denied 指令而不是 Deny from all,这优先于树上更高的任何后续 Allow 指令。总而言之,如果您要将 Order/Allow/Deny 指令迁移到其等效的 Requires,那么您必须所有这些指令会发现你得到了你没想到的 403。
  • @ Anonymous 看来,在我玩过之后(更重要的是,正确地重新阅读手册)Options ExecCGI 不是 mod_fcgid 所必需的,它只有一个对 mod_cgi 的影响。 AllowOverride all 也不需要让它工作 - 但没有它(或至少一个允许某些东西的 AllowOverride 指令)你不能使用 .htaccess 文件。我强烈建议您阅读并理解manual,了解这些指令的作用和可能的值。
  • 是的,当我查看配置时,我还注意到主目录中的 deny from all。感谢您进一步澄清并为此问题的调查和解决方案做出贡献。
  • 我刚刚在 Windows 8.1(64 位)的 Apache 2.4 VC11(来自 Apache Lounge)上安装了 PHP 5.5 VC11 NTS。对我来说,Options ExecCGI 是不同的。没有它,Apache 将不会启动任何 FCGI 进程,它只会返回 403 permission denied。
猜你喜欢
  • 2014-06-29
  • 1970-01-01
  • 2018-06-11
  • 2022-01-18
  • 2014-04-10
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多