画像が見つからなかった時に.htaccessファイルを使って自動で404 no image画像に転送する方法

テストサイトや(本番サイトでも)画像がリンク切れになっているときに、自動で代替えの画像を表示させたい時があると思います。その時の.htaccessファイルを自分のコピペ用にメモ。

手順

  1. 404.png として画像がリンク切れになった時に表示する画像を作成する。
  2. ドメイン直下のフォルダに上記 404.png 画像をアップロード
  3. 下記のコードをドメイン直下のフォルダ内にある .htaccess ファイルの先頭に追加(無ければ作成)

コード

まあ転送するだけなんですけど

# 画像ファイルが存在しない場合の代替画像リダイレクト
<IfModule mod_rewrite.c>
RewriteEngine On
# 画像ファイル(jpg, jpeg, png, gif, webp, svg)のリクエストで、ファイルが存在しない場合
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(jpe?g|png|gif|webp|svg)$ [NC]
RewriteRule ^(.*)$ /404.png [L,R=302]
</IfModule>

解説

この .htaccess ファイルは要するに「画像ファイルが存在しない場合に「404.png」へ転送(リダイレクト)する」って設定を書いてます。

  1. 画像ファイルの存在チェック
    RewriteEngine On → mod_rewrite(URL書き換えエンジン)を有効化
  2. 画像ファイルが存在しない場合のリダイレクト
    RewriteCond %{REQUEST_FILENAME} !-f → リクエストされたファイルが存在しない場合に次のルールを適用
  3. RewriteRule .(jpg|jpeg|png|gif)$ /404.png [L]
     → jpg, jpeg, png, gif いずれかの拡張子で終わるリクエストが対象
     → ファイルが存在しなければ「/404.png」に転送
      [L] はこのルールで処理を終了する指示

これで画像ファイルが見つからない場合に、ユーザーには「404.png」が表示されるから、デフォルトの404エラーの代わりに専用画像を見せれる。画像のリンク切れ対策や、デザインを損なわない404対応として役立つっていう寸法~。

質問・コメントなどあると嬉しいです