1

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 に適用していませんか?

4

1 に答える 1

1

まず第一に、Apache が HTTP/HTTPS リクエストを受け取るとき、相対的なものは何もありません。相対パスは、Web サーバーに要求を送信する前に、ブラウザー自体によって解決されます。

コードを次のように変更してみてください。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /bla/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.+)$ /cgi-bin/env.pl?.template=Main.html&.query=$1 [L,QSA]
于 2013-05-06T17:38:45.493 に答える