動的に生成された画像のキャッシュ システムを実装しています。スクリプトは 経由/img/type/param1/param2.png
で呼び出されます。複数のタイプが可能で、パラメータの数は可変です。スクリプトはイメージを生成し、ディスクにダンプします。
.htaccess
画像生成スクリプトを要求するときのルールが欲しい:
- キャッシュされたファイルが存在するかどうかを確認します
- その場合、キャッシュされたファイルへの mod_rewrite
- そうでない場合は、スクリプトが実行されるように何もしないでください
私がこれまでに持っているのは、わずかに変更されたロジックです。
- キャッシュされたファイルがある場所への mod_rewrite
- ファイルが存在するかどうかを確認する
- そうでない場合は、リクエストをもう一度 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.png
l/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]
内部サーバー エラーが発生します。
この問題を解決するにはどうすればよいですか?