// 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行だけ取り出してとかは、期待通りに動作しなくて当然だと思う。
これ以外に、直リン禁止の記述があったら、また動作が変わってくると思うけど・・。
ご覧になった記事というのが分かりませんが、HTTP_USER_AGENT ではなく HTTP_REFERER ではないでしょうか。
×間違いは:RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]
◎正しくは:RewriteCond %{HTTP_USER_AGENT} !(googlebot|yahoo|bingbot) [NC]
googlebotの先頭に「|」が入っており、
この記号が入るだけで全ての制御ができなくなります。
他にも以下サイトでも間違い(ゴミ付き)コードが公開されています。
https://webllica.com/disable-direct-access-to-image-by-htaccess/
以下コードで制御できると思います。
↓↓↓↓↓
# 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]
※サーバによっては別の記述もあるので、こちらで解決しなければもう一方をお試しを。
掲載していただいた記述を元に当方の環境に合わせていくつか.htaccessで制御しているうちSNSが関係してくる画像のフォルダにあった.htaccessと差し替えてみました。
実のところWordPressで運営しているブログでの画像の取扱でしたので、TwitterやFacebookはどうやらWordPressのメディアファイルの画像(アイキャッチ)のをシェア等で使用するようでしたので、そっちのほうはシェア等されたくないファイルの一律の接頭語を付けて正規表現でシェア出来ないようにしたのですが、今回差し替えたフォルダはbot、とくにGoogleの画像検索で検索Okとしたい意図がありましたのでまだ今の所Google画像検索に反映されない為、ちょっと様子を見ている状況です。
※以前の.htaccessだとbotのことが念頭になくGoogle画像検索に反映されてもよい画像フォルダの画像をすべて検索から消えてしまったので、ご教示いただいたコードを元に差し替えた次第です。
いずれにしましてもとても有意義なコメントをいただきまして感謝しています。
本当に有難うございました。
ポイントを、と思ったのですけれど、大変残念なのですがコメントにはそれが出来ないようでした(回答のみのようでした)。