1

動的に生成された画像のキャッシュ システムを実装しています。スクリプトは 経由/img/type/param1/param2.pngで呼び出されます。複数のタイプが可能で、パラメータの数は可変です。スクリプトはイメージを生成し、ディスクにダンプします。

.htaccess画像生成スクリプトを要求するときのルールが欲しい:

  1. キャッシュされたファイルが存在するかどうかを確認します
  2. その場合、キャッシュされたファイルへの mod_rewrite
  3. そうでない場合は、スクリプトが実行されるように何もしないでください

私がこれまでに持っているのは、わずかに変更されたロジックです。

  1. キャッシュされたファイルがある場所への mod_rewrite
  2. ファイルが存在するかどうかを確認する
  3. そうでない場合は、リクエストをもう一度 mod_rewrite します

これを行うためのより良い方法があれば、私はそれを聞きたいです。いずれにせよ、私の .htaccess ファイルの関連部分:

RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2

RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1

これはうまくいかないようです。それをデバッグするために、最初の RewriteRule の後に次を挿入しました (ターゲット ページはその入力をダンプするだけです)。

RewriteRule ^(.*)$ /htaccess.php?url=$1 [END]

その結果、次のようになります。

Array
(
    [url] => /images/cache/a/l/300.png/a/l/300.png
)

だけではなく を$2含む理由がわかりません。l/300.png/a/l/300.pngl/300.png

最初の RewriteRule を変更して を含めると[L]、期待どおりの結果が得られます。ただし、リクエストを非キャッシュ バージョンに戻す 2 番目の RewriteRule で、まったく同じ「二重一致」の問題が発生します。ただし、[L]この 2 番目の RewriteRule に次を追加します。

RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2 [L]

RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1 [L]

内部サーバー エラーが発生します。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1