WordPress 画像をリファラ判定を行い自サイトからのみ表示可能にする&PHPファイルの直接参照を禁止

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

画像に直接アクセスさせたくないという場合のカスタマイズ。外部サイトから自サイト内の画像を呼び出した際に画像が表示できなくなります。WordPressサイト内のPHPファイルに直接アクセスがあった場合プログラム実行をさせないようにする

.htaccess
# 画像をほかのサイトから直接表示させない(リファラが空のときは表示する・Apache 2.4)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpe?g|png|gif|webp)$ - [F]
</IfModule>

以前は deny from all + 自分のサイトからのリファラだけ許可、の書き方を載せていました。この書き方だと、URL を直接開いたとき・X や Facebook が OGP の画像を取りに来るとき・Google の画像検索・メールなど、リファラを送らない見方がすべて 403 になり、自分のサイトの画像が出ないこともあります。リファラが空のときは表示し、よそのサイトのリファラだけを止める形に書き換えました(2026/10/18・作業環境の Apache 2.4 で、リファラなし 200・自分のサイト 200・よそのサイト 403 を確かめています)。example.com は自分のドメインに変えてください。

「.」の前にはエスケープ用の「\」が必要になります

この記述で自サイトから呼び出されたファイルのみアクセスを許可する(使用可能)という設定になります。

制作者の方など直接ファイルが見れたほうが良いという場合はコメントアウトしているIP制限の箇所を有効にすることで特定のIPからは今まで通り直接ファイルを閲覧することができます。

.htaccessの設置ディレクトリ ( 設置例 )

アップロードファイル・ディレクトリ ( 画像直リンク対策 )

/wp-content/uploads/.htaccess

他にも見られたくないデータをおいているディレクトリがあれば同様の.htaccessを対象ディレクトリに設置するだけで制限がかけられます。

WordPressにて使用することを前提としたPHPファイルへの直接アクセスを制限

if ( !defined('ABSPATH') ) {
    exit;
}

テーマディレクトリなど直接プログラムを設置する場合に上記記述を先頭に追加しておくことでWordPress内でしか処理が実行できないようにすることが出来ます

ABSPATH定数はwp-configで定義されています

関連機能

  1. 公開フォルダに残った古い PHP スクリプトの見つけ方と片付け方:手元のコピーで探して、外から開かずに片付ける

  2. SiteGuard と CloudSecure を比べる:SiteGuard に統一し、ログインの URL の落とし穴も直した

  3. /?author=id でアクセスした時の投稿者アーカイブリダイレクトを無効にする

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP