.htaccessで直リン禁止でもFacebook,Twitter,feedlyは許可する場合


// Yahoo!知恵袋で意味不明な回答しか来ないのでこちらに投稿しました。 Add Star

WordPressで画像フォルダに直リンクを拒否する.htaccessを設置するのは出来ましたが、そのままですと、Facebook、Twitterのシェア、feedlyへの画像反映が不可になってしまいます。

.htaccessを画像フォルダに設置し、

自分のドメインからは許可
Facebook、Twitterのシェア、feedlyへの画像反映
他サイト(ブログ等)からは拒否

としたい場合の.htaccessの記述方法はどのようにしたらよいでしょうか?

ちなみに、検索で直リン禁止でもFacebook等はOkにするといった記事のコードを記述してみましたが、シェアやフィードへの画像は反映されませんでした。
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit) [NC]
です。mod_rewriteを使わない汎用的な記述も試しましたがやはりダメでした。

借りてるサーバーはエックスサーバーです。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2018/04/05 18:19:10
  • 終了:2018/04/05 22:20:07

ベストアンサー

id:kaoato No.2

kaoato回答回数131ベストアンサー獲得回数552018/04/05 20:31:27

ポイント450pt

<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行だけ取り出してとかは、期待通りに動作しなくて当然だと思う。

これ以外に、直リン禁止の記述があったら、また動作が変わってくると思うけど・・。

id:candy1967

有難うございます。
私も調べてみましたら、FB、Twitter、feedlyのいずれもメディアディレクトリから読み込んでいるようです。
ですので、ファイルマッチでメディアディレクトリ内のファイルに対して許可・不許可に.htaccessを作成して試してみようと思います。

2018/04/05 22:21:32

その他の回答(1件)

id:gizmo5 No.1

gizmo5回答回数485ベストアンサー獲得回数1382018/04/05 20:10:23

ポイント50pt

ご覧になった記事というのが分かりませんが、HTTP_USER_AGENT ではなく HTTP_REFERER ではないでしょうか。

id:kaoato No.2

kaoato回答回数131ベストアンサー獲得回数552018/04/05 20:31:27ここでベストアンサー

ポイント450pt

<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行だけ取り出してとかは、期待通りに動作しなくて当然だと思う。

これ以外に、直リン禁止の記述があったら、また動作が変わってくると思うけど・・。

id:candy1967

有難うございます。
私も調べてみましたら、FB、Twitter、feedlyのいずれもメディアディレクトリから読み込んでいるようです。
ですので、ファイルマッチでメディアディレクトリ内のファイルに対して許可・不許可に.htaccessを作成して試してみようと思います。

2018/04/05 22:21:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません