仅拒绝访问 PHP 文件

仅拒绝访问 PHP 文件
  • Apache HTTP Server 2.2.21 带有 SuExec 下的 VirtualHosts
  • PHP 5.3.8 通过 fcgid
  • Arch Linux 2011.08.19

每次我尝试访问 PHP 文件时,Apache 都会报出 403 访问被拒绝错误。HTML 文件和文本文件运行正常。我尝试了所有我能想到的 PHP 文件权限组合,从 644 到 777。但什么都没变。

我还尝试了 FCGI 包装器和父文件夹的权限。使用 o+x (777, 775, 773, 771),我在浏览器中得到以下信息:

禁止访问!

您无权访问所请求的对象。该对象要么是读保护的,要么是服务器无法读取的。

…vhost 错误日志中的内容如下:

服务器配置拒绝客户端:/srv/www/hostname/fcgid-bin/php-fcgid-wrapper

使用 ox (776, 774, 772, 770 或以下),我在浏览器中得到以下信息:

禁止

您无权访问此服务器上的 /fcgid-bin/php-fcgid-wrapper/index.php。

此外,尝试使用 ErrorDocument 处理请求时遇到 403 Forbidden 错误。

…日志中的内容如下:

(13)权限被拒绝:访问/fcgid-bin/php-fcgid-wrapper/index.php 被拒绝

这确实让我感到困惑,因为在我开始得到这个之前我的设置一直运行良好,我不知道我可以做些什么来改变这一点。/usr/bin/php-cgi并且当直接调用时,包装器都可以使用完全相同的输入文件正常工作。

这是我的虚拟主机配置:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/srv/www/hostname/public/"
    ServerName hostname.com
    ServerAlias www.hostname.com
    SuexecUserGroup hostname hostname
    ErrorLog "/srv/www/hostname/logs/error.log"
    LogLevel debug
    CustomLog "/srv/www/hostname/logs/access.log" combined

    <Directory /srv/www/hostname/public>
        Order allow,deny
        Allow from all
    </Directory>

    # http://www.linode.com/forums/viewtopic.php?t=2982
    <IfModule !mod_php5.c>
    <IfModule !mod_php5_filter.c>
    <IfModule !mod_php5_hooks.c>
    <IfModule mod_actions.c>
    <IfModule mod_alias.c>
    <IfModule mod_mime.c>
    <IfModule mod_fcgid.c>
        AddHandler php-fcgi .php
        Action php-fcgi /fcgid-bin/php-fcgid-wrapper
        Alias /fcgid-bin/ /srv/www/hostname/fcgid-bin/

        <Location /fcgid-bin/>
            SetHandler fcgid-script
            Options +ExecCGI
        </Location>

        ReWriteEngine On
        ReWriteRule ^/fcgid-bin/[^/]*$ / [PT]
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
</VirtualHost>

答案1

<Directory /srv/www/hostname/public>
    Order allow,deny
    Allow from all
</Directory>

这不包括/srv/www/hostname/fcgid-bin/;假设您的配置中没有Allow其他地方应用它,这就是问题所在。您需要Allow访问此位置。

答案2

我犯了类似的错误,只不过是由于错过了

Options ExecCGI

行来自我的脚本所在的目录(在虚拟服务器子文件夹中),这就是为什么 html 文件加载正常,但 php 文件出现 403 错误的原因。

相关内容