Apache-2.2

僅限 PHP 文件的訪問被拒絕

  • December 22, 2017
  • SuExec 下帶有 VirtualHosts 的 Apache HTTP Server 2.2.21
  • PHP 5.3.8 通過 fcgid
  • Arch Linux 2011.08.19

每當我嘗試訪問 PHP 文件時,我都會從 Apache 收到 403 Access Denied 錯誤。HTML 文件和文本文件工作正常。我已經使用了我能想到的 PHP 文件的所有可能的權限組合,從 644 到 777。不會改變任何東西。

我還使用了 FCGI 包裝器和父文件夾的權限。使用 o+x (777, 775, 773, 771),我在瀏覽器中得到了這個:

禁止訪問!

您無權訪問請求的對象。它要麼是讀保護的,要麼是伺服器不可讀的。

…這在虛擬主機錯誤日誌中:

客戶端被伺服器配置拒絕:/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 admin@hostname.com
   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>
<Directory /srv/www/hostname/public>
   Order allow,deny
   Allow from all
</Directory>

這不包括/srv/www/hostname/fcgid-bin/; 假設在您的配置中的其他地方沒有Allow應用它,這就是問題所在。您需要Allow訪問此位置。

我有一個類似的錯誤,除了我的錯誤是由於錯過了

Options ExecCGI

從我的腳本所在的目錄(在虛擬伺服器子文件夾中)行,這就是為什麼 html 文件載入正常,但 php 文件給出了 403s。

引用自:https://serverfault.com/questions/325889