Open1

WordPress でリファラー制限をする場合の対応

childsviewchildsview

画像などを直リンク禁止、自サイト経由でのみ表示したい場合、リファラ-制限をすると思います。
リファラー制限をする場合の一般的な書き方は、

SetEnvIf Referer "^https://www\.example\.jp" ref_ok
Order Deny,Allow
Deny from all
Allow from env=ref_ok

のように記載します。
これを wp-content/uploads/に.htaccessとして設置すると、直リンクが禁止出来ると思います。

従来この方法で問題なかったのですが、WordPressのブロックエディタがiframe化したことによって、この方法だとうまくいきません
(iframe内なのでリファラーが取れなくなるためです)

そのため、別の方法を検討する必要があります。

うまく行かなくなったのが、管理画面の投稿画面なので、つまりログインユーザーには許可を与えれば良いのです。そのためcookieを発行してあげます。

SetEnvIf Referer "^www\.example\.jp" ref_ok
SetEnvIf Cookie "wp_auth=1" auth_ok

<RequireAny>
    Require env ref_ok
    Require env auth_ok
</RequireAny>

htaccessは上記のように書き換えます。

add_action('init', function () {
    if (is_user_logged_in()) {
        setcookie('wp_auth', '1', time() + 3600, '/', $_SERVER['HTTP_HOST'], is_ssl(), true);
    } else {
        setcookie('wp_auth', '', time() - 3600, '/', $_SERVER['HTTP_HOST'], is_ssl(), true);
    }
});

functions.phpかプラグインで、上記のように記載してあげます。
そうすると、ログインユーザーにはcookieが発行されて投稿画面でも画像が閲覧出来るようになります。