web-dev-qa-db-ja.com

ApacheのRewriteCondディレクティブをリセットするにはどうすればよいですか?

私はこのようないくつかの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]

次のことを行う必要があります。

  1. 画像のリクエストがbadsite.comからのものである場合は、それをブロックし、代わりにホットリンク画像を表示します。
  2. イメージの定期的なリクエストが届いた場合は、cdnサブドメインでホストされているイメージにリダイレクトします。
  3. それ以外の場合、リクエストがファイルまたはディレクトリでない場合は、Webページページをロードします(CodeIgniterを経由します)。

ただし、最初のRewriteCondは、ホットリンクルールではなく、リダイレクトルールに適用されていると思います。これは、そのリファラーからの画像のリクエストが、ホットリンク画像ではなくCDNにリダイレクトされるためです。 Apacheドキュメントの例 (セクションの下部)は、改行がRewriteCondの適用を停止することを意味しますが、それは発生していません。

RewriteCondルールを「リセット」する方法はありますか、それとも設定に他のエラーがありますか?

5
DisgruntledGoat

改行はまったく重要ではありません。 RewriteCondは1つのRewriteRuleにのみ適用されます。その真下にあるもの。

コンテキストはApacheに関連しているため、構成に関する詳細情報を提供すると便利です。しかし、2番目のRewriteRuleが機能するという事実から、この構成は<Directory>コンテキストまたは.htaccessファイルのいずれかに設定されており、/staticは次の場所にあるようです。そのコンテキストのルート。

それを考えると、最初のRewriteRuleは決して一致しません。パターンを変更します。

.*/static/artwork/.*\.(jpg|png)$

..に..

^static/artwork/.*\.(jpg|png)$
5
Shane Madden