web-dev-qa-db-ja.com

Wordpressでhtaccessを使ったホットリンクを防ぐ方法と、それについて最も一般的な使い方がうまくいかないのはなぜですか?

私はこの.htaccess設定から始めました:

Options -Indexes
<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# END WordPress

そして、ホットリンクを使ってウェブサイトを盗難から守るために、コードの一番下にこのコードを追加して最善の解決策を探しました。

RewriteEngine on
RewriteCond %{REQUEST_URI} !hotlinking\.png$
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mywebsite\.com [NC]
RewriteRule \.(jpe?g|png|gif)$ /hotlinking.png [NC,L]

上記のコードは、ホットリンクを防ぐための最も一般的な解決策ですが、非常に明確ですが、うまくいきません。たとえば、画像のURLを貼り付けると、

https://www.mywebsite.com/wp-content/uploads/sites/2/2018/01/imagexample.jpg

ブラウザに画像が表示されます。

コードにエラーがありますか、それともより良い解決策がありますか?

3
Rox

画像のURLを貼り付けると

私はあなたがURLをブラウザのアドレスバーに直接貼り付けるときを意味していると思います。 (?)

その場合は、表示されている動作は正しいです。ブラウザを表示してください。これは実際には「ホットリンク」ではありません。これは直接の要求です。 HTTP Refererヘッダーを送信しないサイトの実際のユーザーに対してこれらの画像をブロックしてしまう可能性があるため、(HTTP Refererが空のとき)直接のリクエストを現実的にブロックすることはできません。

次の条件は、この要求が発生するのを許可するものです。

RewriteCond %{HTTP_REFERER} !^$

すなわち。 HTTP_REFERERnotemptyの場合.


ASIDE: あなたの質問に "multisite"というタグを付けましたが、.htaccessファイルに両方のコードがあると思われます。単一サイトのコードが最初であるため、これが「勝ち」です。

2
MrWhite