1

必要に応じて特定の画像サイズを生成するために使用する画像キャッシュシステムを持っています。modrewrite を使用してファイルをチェックし、存在しない場合はイメージ作成システムを呼び出します。私が抱えている問題は、イメージが存在していてもイメージ作成システムを呼び出していることです!

modrewrite は十分に単純です (images サブディレクトリ内のサイト)。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /images/index.php?id=$1 [L,QSA]

-dディレクトリチェックが混乱していた場合に備えて、削除しようとしました。index.phpコード内にファイルが存在することを確認するようになりました-それは存在すると報告します。

images/cache/140x20/Test.JPG私はhtmlでURLを使用しています-ファイルが存在するためRewriteCond、index.phpコードを呼び出すべきではありません-しかし、何らかの理由でそうしますか?

それは明らかなことだと確信していますが、私はそれを理解することができません

4

1 に答える 1

1

.htaccessはimagesディレクトリにあります。R = 302を使用して、期待される正しいパスを取得しますwww.domain.com/images/index.php?id=cache/140x20/Test.JPG

それは変だ。サブディレクトリでテストしていて、の予期しない値を取得していました%{REQUEST_FILENAME}。しかし、ドキュメントルートから再構築することで、チェックを正しく機能させることができました。たぶん、%{REQUEST_FILENAME}apacheがURIパスからファイルパスを作成するために使用する私の理解または基礎となるメカニズムは、私が期待したものとは異なります。

試す:

RewriteCond %{DOCUMENT_ROOT}${REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}${REQUEST_URI} !-d
# and maybe for good measure
RewriteCond %{REQUEST_URI} !index.php

編集:

拡張子がすべて大文字であるが、画像のファイル名拡張子が常にすべて小文字である場合は、RewriteMaptolowerを使用し、次の関数を使用してマップを定義できます。

(サーバーまたはvhost構成のどこか:

RewriteMap lowercase int:tolower

次に、htaccessファイル(他のルールの上)で、ファイル名を小文字に変更します。

# first check to make sure request doesn't already have all lowercase image extension
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|bmp|gif)$
RewriteRule ^(.*)\.(jpe?g|png|bmp|gif)$ /$1.${lowercase:$2} [NC,L]

ファイル名全体またはパス全体で同様のことを行うこともできます。

于 2012-07-23T17:21:48.123 に答える