URL が存在しない場合、ディレクトリ内のファイルを CGI にリダイレクトしようとしています。CGI では、URL がさらに処理されます。これには、HTML ドキュメント内で参照される存在しないファイルの結果も含まれるため、存在しない参照 (imgs、css ファイル、js ファイル) が多数含まれている場合、HTML ドキュメントはリダイレクトのカスケード全体をトリガーする可能性があります。もちろん、理想の世界では、それらすべてが存在するはずですが、まぁ…
。リダイレクトしたい URL のいずれかで、"." を含むファイル名を除外するのはかなり気の利いたアイデアだと思いました。これは、.css、.js、および .gif/.jpg を処理する必要があるためです。
それほど幸運ではありません。「.」を含む URL を入力すると、ブラウザーの場所で、(正しい) メッセージ「ファイルが見つかりません」が表示されますが、サーバー ログを確認すると、HTML テンプレートによって参照される存在しないすべてのファイルが、含まれているかどうかに関係なく、CGI に渡されます。 ." か否か。"." を含む他のすべてのファイルcss/doc.css
はそのまま処理されます。images/bg.png
私の .htaccess ファイルには、次のルールが含まれています。
RewriteEngine on
RewriteBase /bla
RewriteCond %{REQUEST_FILENAME} !\.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /cgi-bin/env.pl?.template=Main.html&.query=$1 [PT]
ただし、外部スタイルシート (css/doc.css) の HTML ファイル内の参照の 1 つを絶対 URL (別名 /css/doc.css) に変更すると、「ファイルが見つかりません」というエラーが発生するだけです。上記のルールに従う必要があります。Apache はこれらの正規表現を相対 URL に適用していませんか?