私はこのようないくつかのApache構成を持っています:
# Image hotlinking rule
RewriteCond %{HTTP_REFERER} ^http://badsite\.com/
RewriteRule .*/static/artwork/.*\.(jpg|png)$ /static/images/hotlink.png [L]
# Redirects
RewriteRule ^static/artwork/(.+)$ http://cdn.mysite.com/artwork/$1 [L,R=301]
# CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
次のことを行う必要があります。
badsite.com
からのものである場合は、それをブロックし、代わりにホットリンク画像を表示します。ただし、最初のRewriteCond
は、ホットリンクルールではなく、リダイレクトルールに適用されていると思います。これは、そのリファラーからの画像のリクエストが、ホットリンク画像ではなくCDNにリダイレクトされるためです。 Apacheドキュメントの例 (セクションの下部)は、改行がRewriteCond
の適用を停止することを意味しますが、それは発生していません。
RewriteCond
ルールを「リセット」する方法はありますか、それとも設定に他のエラーがありますか?
改行はまったく重要ではありません。 RewriteCond
は1つのRewriteRule
にのみ適用されます。その真下にあるもの。
コンテキストはApacheに関連しているため、構成に関する詳細情報を提供すると便利です。しかし、2番目のRewriteRule
が機能するという事実から、この構成は<Directory>
コンテキストまたは.htaccess
ファイルのいずれかに設定されており、/static
は次の場所にあるようです。そのコンテキストのルート。
それを考えると、最初のRewriteRule
は決して一致しません。パターンを変更します。
.*/static/artwork/.*\.(jpg|png)$
..に..
^static/artwork/.*\.(jpg|png)$