- 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 错误的原因。