mod_rewrite が Web ルート ディレクトリで動作しない

mod_rewrite が Web ルート ディレクトリで動作しない

以下の 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

関連情報