以下の Apache/mod_rewrite 設定では、ルート /var/www/ 上のすべての CGI スクリプトに対して 403 禁止エラーが発生しますが、静的ファイルに対してはエラーは発生しません。
ルート ディレクトリ外のスクリプト (例: /var/www/random/script.cgi) はエラーなく正常に動作します。
RewritedEngineをオフにすると、CGIスクリプトはルート/var/www/でも正常に動作します。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
Options SymLinksIfOwnerMatch
AllowOverride All
<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>
</Directory>
<Directory /var/www/>
Options +ExecCGI
Options SymLinksIfOwnerMatch
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler cgi-script .cgi
DirectoryIndex index.cgi
</Directory>
<Files "index.cgi">
SetHandler perl-script
PerlHandler ModPerl::PerlRunPrefork
Options ExecCGI
PerlSendHeader On
allow from all
</files>
答え1
動作しているスクリプトをルートにコピーして、それが conf とは関係のないものであるかどうかを確認してください。実行権限などを保持するには、cp の -p フラグを使用します。例:
cp -p /var/www/random/script.cgi /var/www/script.cgi