3

次のパターンで終わらない画像のホットリンクを禁止する正規表現を設定したいと思います: -200.jpg

「200」は、実際には「150」または「250」、または 100 ~ 999 の任意の数 (つまり 3 文字) です。.jpg は .jpeg または .png にすることができます。.gif のホットリンクは許可されています。

私は次のようなことから始めました:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteRule [^0-9]{3}\.(jpe?g|png)$ /img/hotlink.gif [NC,R,L]

例: これは許可される h*ttp://mywebsite.tld/dir/dir/hello_sdfk456er_142.jpg-200.jpgべきですが、これは拒否されるべきです:h*ttp://mywebsite.tld/dir/dir/hello_sdfk456er_142.jpg

しかし、これは機能していません。

また、次のことも考慮してください。

url_rewriting を使用しているため、画像を表示する html ページはh*ttp://mywebsite.tld/username/1337.jpg 、1337 がデータベース内の画像の ID を表す場所のようになります。この微妙さを強調する理由は、次のようなルールがあるためです。

RewriteRule ![0-9]{3}\.(jpe?g|png)$ /img/hotlink.gif [NC,R,L]

動作しません。

編集:

いくつかの例外を追加して解決しました:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI}  !/[0-9]+\.(jpe?g|gif|png)$ [NC]
RewriteRule \.(jpe?g|png)$  /img/hotlink.gif [NC,R,L]

「よりセクシーな」方法を知っているなら、教えてください。とにかく、試してくれた人に感謝します(メッセージを削除しましたか?)

4

2 に答える 2

1

あなたのソリューションには 2 つの欠陥があります。

  1. の 4 行目では、単に(ハイフンなし)/[0-9]+という名前の画像をホットリンクすることもできます。200.jpg
  2. RewriteRule 条件が欠落しているため、.gifイメージのホットリンクが許可されません。

更新されたバージョンは次のとおりです。

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?mywebsite\.com/ [NC]
RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
RewriteRule .* http://mywebsite.com/img/hotlink.gif [NC,R,L]

次のように読むことができます。

  1. リファラーが空でない場合
  2. リファラーは私のサイトではありません
  3. また、許可されたパターン (例: -123.gif) で終わらない画像が要求されています。
  4. 次に、hotlink.gif を表示します
于 2012-12-07T00:02:27.527 に答える
0
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI}  !/[0-9]+\.(jpe?g|gif|png)$ [NC]
RewriteRule \.(jpe?g|png)$  /img/hotlink.gif [NC,R,L]
于 2012-12-06T20:45:17.583 に答える