【WordPress】アップロードしたメディア、ファイルにアクセス制限をかけて非公開にしたい。
こんにちは、朝出勤したら上司にWANDSの再始動を告げられて動揺してるyamashitaです。
今回はWordPressのメディアにアップロードした各ファイルへのアクセス制御について書こうと思います。
WordPressは記事の投稿を非公開にしても、それに添付されたメディアにアクセス出来てしまいます。
ディレクトリに置いてあるだけなので当然といえば当然ですが、「記事を非公開にしても添付ファイルが非公開にならないのはおかしいでしょ。」と思ったので対処法を調べてみました。
検索してもメディアの投稿ページへのアクセス制御が多くヒットし、ファイル自体に対するアクセス制御の処理はあまりヒットしませんでした。
.htaccessの基本的な処理で対応できてしまうので誰も書いてないだけかもしれませんが・・・・
今回紹介する対処法の大まかな流れは以下の通りです。
- ファイルを削除する
- 同サイトからのアクセスのみ許可する
- 期間を決めて非公開にする
- ファイル名を直接指定して非公開にする
ファイルを削除する
WordPressの管理画面から非公開にしたいメディアを削除するのが一番です。
これはアクセス制御でも何でもありませんが。
同サイトからのアクセスのみ許可する
以下の内容を.htaccessに記載してuploads直下に置いてください。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://任意のドメイン/.*$
RewriteRule \.*$ - [F]
任意のドメインの部分は適宜変更してください。
これで投稿ページに埋め込んであるものとサイト内のリンクから以外は見られなくなりました。
この場合は全てのメディアが対象です。
完全な非公開ではないので注意です。
期間を決めて非公開にする
正確な期間ではなく、WordPressのメディアのディレクトリが月毎に分かれているのでそれをそのまま使います。
RewriteEngine On
# ホワイトリスト
RewriteCond %{REQUEST_URI} !^(.*)/2019/11/.*$
# ブラックリスト
# RewriteCond %{REQUEST_URI} ^(.*)/2019/11/.*$
RewriteRule \.*$ - [F]
ホワイトリストかブラックリストどちらか都合のいい方で指定できます。
RewriteCondを複数行書けばAND条件で複数か月対応できます。
ファイル名を直接指定して非公開にする
RewriteEngine On
# ホワイトリスト
RewriteCond %{REQUEST_URI} !^(.*)sample.jpg$
# ブラックリスト
# RewriteCond %{REQUEST_URI} ^(.*)sample.jpg$
RewriteRule \.*$ - [F]
全部書こうとすると物量作戦になりそうです。
まとめ
これらの方法を組み合わせれば、それなりに対応できそうです。
今後はこれらを投稿の公開、非公開に合わせて自動的に処理できるようになればいいなと思ってます。
次回に続くかはわかりません。
以上