Apache权限被拒绝

Ano*_*ous 16 php apache permissions httpd.conf

我刚刚在Windows上安装了一个带有Php fast cgi build的新Apache 2.4.2.

然后我修改了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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ano*_*ous 29

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

<Directory "C:/SITE/localhost/www">
    Options ExecCGI
    AllowOverride all
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

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.conf,则Allow指令将不起作用,因为默认的顶级部分使用Require all denied指令而不是Deny from all,并且这优先于Allow树上方的任何后续指令.除此之外,如果你将Order/Allow/Deny指令迁移到它们的等效需求,那么你必须有机会所有这些或者你会发现你得到了你没想到的403s.

  • 但是,如果执行2.4的新安装并将配置基于默认的2.4 httpd.conf,则`Allow`指令将不起作用,因为默认的顶级`<Directory />`部分使用`要求全部被拒绝`指令而不是`全部拒绝',这优先于树上的任何后续`Allow`指令.缺点是,如果你将`Order` /`Allow` /`Deny`指令迁移到它们的等同`Require`s,那么你必须有机会*所有这些*或者你会发现你得到了403s你没想到. (15认同)
  • 经过一些实验,我发现了一个细微差别,使得这个问题成为正确的答案,这是Apache 2.3+特有的.似乎mod_authz_host指令优先于mod_access_compat指令,并且**这会在目录树**中一直冒泡.这意味着如果您从Apache 2.2迁移到Apache 2.4并且您使用2.2 httpd.conf逐字,它将起作用.[续下评论] (10认同)
  • @ Anonymous看来,在我玩完之后(并且,更重要的是,重新阅读手册),mod_fcgid不需要"Options ExecCGI",它只对mod_cgi产生影响.`AllowOverride all`也不是必需的 - 但如果没有它(或者至少是允许某些东西的'AllowOverride`指令),你就不能使用.htaccess文件.我强烈建议您阅读并理解[手册](http://httpd.apache.org/docs/2.4/mod/core.html),了解这些指令的作用和可能的值. (4认同)
  • 我刚刚在Windows 8.1(64位)上在Apache 2.4 VC11(来自Apache Lounge)上安装了PHP 5.5 VC11 NTS.对我来说,'Options ExecCGI`是不同的.没有它,Apache不会启动任何FCGI进程,它只是返回403权限被拒绝. (2认同)