// Yahoo!知恵袋で意味不明な回答しか来ないのでこちらに投稿しました。 Add Star
WordPressで画像フォルダに直リンクを拒否する.htaccessを設置するのは出来ましたが、そのままですと、Facebook、Twitterのシェア、feedlyへの画像反映が不可になってしまいます。
.htaccessを画像フォルダに設置し、
自分のドメインからは許可
Facebook、Twitterのシェア、feedlyへの画像反映
他サイト(ブログ等)からは拒否
としたい場合の.htaccessの記述方法はどのようにしたらよいでしょうか?
ちなみに、検索で直リン禁止でもFacebook等はOkにするといった記事のコードを記述してみましたが、シェアやフィードへの画像は反映されませんでした。
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit) [NC]
です。mod_rewriteを使わない汎用的な記述も試しましたがやはりダメでした。
借りてるサーバーはエックスサーバーです。
<Files ~ "\.(gif|png|jpg|jpeg)$">
SetEnvIf Referer "^https://blog\.example\.com" ref_ok
SetEnvIf Referer "^https://twitter\.com" ref_ok
SetEnvIf Referer "^https://www\.facebook\.com" ref_ok
SetEnvIf Referer "^https://feedly\.com/" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Files>
gif、png、jpg、jpegファイルを
https://blog.example.com
https://twitter\.com
https://www.facebook.com
https://feedly.com
以外から参照されたら、アクセス拒否
Referer =>参照元のURL
HTTP_USER_AGENT =>ユーザーエージェント
よく見かけるのは上記。
■
# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
たぶんこれのことだと思うけど、
twitterとかのBotエージェントが、画像を参照にしてきたときに許可するという記述だと思う。
Twitterカードとかの画像は、たしか一旦Twitterでキャッシュされるのでそれようの記述だと思います。
この設定で、Twitterカードとかの画像は表示される可能性は高いと思う。
Twitterカードの画像のURLをみないと分からないけど。
キャッシュでなくて、直接画像を表示してたら、これだけでなくて、Referer の許可も必要
■
# URL 書き換え処理を ON にする
RewriteEngine on
# 画像へのリンクを許可するサイトを記載
# 複数ある場合は行を分けて書く
RewriteCond %{HTTP_REFERER} !^http(s)?://nj-clucker.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
# bot のアクセスを許可
RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]
# 直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|png|gif)$ - [F]
https://nj-clucker.com/disable-direct-access-to-image-by-htaccess/
上記を少し書きかえて、そのまま使えば良いのでは?
上記でワンセットなので、1行だけ取り出してとかは、期待通りに動作しなくて当然だと思う。
これ以外に、直リン禁止の記述があったら、また動作が変わってくると思うけど・・。
<Files ~ "\.(gif|png|jpg|jpeg)$">
SetEnvIf Referer "^https://blog\.example\.com" ref_ok
SetEnvIf Referer "^https://twitter\.com" ref_ok
SetEnvIf Referer "^https://www\.facebook\.com" ref_ok
SetEnvIf Referer "^https://feedly\.com/" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Files>
gif、png、jpg、jpegファイルを
https://blog.example.com
https://twitter\.com
https://www.facebook.com
https://feedly.com
以外から参照されたら、アクセス拒否
Referer =>参照元のURL
HTTP_USER_AGENT =>ユーザーエージェント
よく見かけるのは上記。
■
# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
たぶんこれのことだと思うけど、
twitterとかのBotエージェントが、画像を参照にしてきたときに許可するという記述だと思う。
Twitterカードとかの画像は、たしか一旦Twitterでキャッシュされるのでそれようの記述だと思います。
この設定で、Twitterカードとかの画像は表示される可能性は高いと思う。
Twitterカードの画像のURLをみないと分からないけど。
キャッシュでなくて、直接画像を表示してたら、これだけでなくて、Referer の許可も必要
■
# URL 書き換え処理を ON にする
RewriteEngine on
# 画像へのリンクを許可するサイトを記載
# 複数ある場合は行を分けて書く
RewriteCond %{HTTP_REFERER} !^http(s)?://nj-clucker.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
# SNS からの画像参照を許可
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
# bot のアクセスを許可
RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]
# 直リンク禁止ファイルアクセス時にエラーを返す
RewriteRule \.(jpg|png|gif)$ - [F]
https://nj-clucker.com/disable-direct-access-to-image-by-htaccess/
上記を少し書きかえて、そのまま使えば良いのでは?
上記でワンセットなので、1行だけ取り出してとかは、期待通りに動作しなくて当然だと思う。
これ以外に、直リン禁止の記述があったら、また動作が変わってくると思うけど・・。
有難うございます。
私も調べてみましたら、FB、Twitter、feedlyのいずれもメディアディレクトリから読み込んでいるようです。
ですので、ファイルマッチでメディアディレクトリ内のファイルに対して許可・不許可に.htaccessを作成して試してみようと思います。
有難うございます。
2018/04/05 22:21:32私も調べてみましたら、FB、Twitter、feedlyのいずれもメディアディレクトリから読み込んでいるようです。
ですので、ファイルマッチでメディアディレクトリ内のファイルに対して許可・不許可に.htaccessを作成して試してみようと思います。