0

私はこれを何時間も解決しようとしてきましたが、何も思いつきませんでした。

.htaccess 内では、誰かが私の Web サイトのフォルダーから画像を要求するたびに、同じ名前のファイルが別のフォルダーに存在するかどうかを確認しようとしています。存在する場合は、そのファイルを返します。そうでない場合は、最初に要求されたファイルを返します。

とても簡単に思えますが、うまくいきません。.htaccess コードは次のとおりです。

RewriteEngine On

RewriteCond /images/blog/watermark/$1 -f
RewriteRule ^(.*) /images/blog/watermark/$1

「RewriteCond」は常に負を返すため、要求された画像は常にそのまま読み込まれます。私がそれを次のように変更すると、

RewriteCond %{REQUEST_FILENAME} -f

常に正を返すので、必要なフォルダーから画像を取得します-画像が存在しない場合を除き、エラーが発生します。これはまさに私が防止しようとしているものです。

私は何を間違っていますか?

ありがとう。

4

2 に答える 2

1

わかった!

どうやら RewriteCond は、ファイルの存在を適切にチェックするためにディレクトリ構造全体を必要とします。

以前に RewriteCond に持っていたパスの前に %{DOCUMENT_ROOT} を追加したところ、機能しました。

また、ドキュメントをさらに読んだ後、RewriteRule から逆参照する場合、最初のグループは $1 ではなく $0 であることに気付きました。

したがって、最終的なコードは次のようになります。

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/images/blog/watermark/$0 -f 
RewriteRule ^(.*) /images/blog/watermark/$1 
于 2010-05-12T19:13:17.003 に答える
1

の構文が間違っていますRewriteCond。おそらく、次のようなことをもっとしたいと思うでしょう:

RewriteCond ^/images/blog/watermark/(.*) -f

この場合、置換文字列ではなく正規表現を取る$1ため、実際には存在しません。RewriteCondそのため、Apache/images/blog/watermark/$1/images/blog/watermark/.

参考: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteCond

于 2010-05-12T18:42:15.160 に答える