WordPressにアップロードしたPDFファイルを差し替えたかった。
具体的には、file01.pdfをfile02.pdfに差し替える。
画面上はaタグのhrefを変更するだけでOKだ。
ただし、Google検索などの検索結果には反映されない。
例えば、Google検索結果に「file01.pdf」がありそれをクリックすると、「file01.pdf」が表示される。
この時には「file02.pdf」が表示されるように301リダイレクトしたかった。
今回は、サーバー環境は別の担当者が管理しており、Apacheの変更ができず、Redirectionプラグインだけでファイルの301リダイレクトを行う必要があった。
Redirectionプラグインでリダイレクトさせる
実現したいことは、Google検索結果に出ているURL「example.com/wp-content/uploads/2024/11/file01.pdf」がクリックされた時に「example.com/wp-content/uploads/2024/12/file02.pdf」へリダイレクトすることだ。
結論として、リダイレクト元ファイルの「example.com/wp-content/uploads/2024/11/file01.pdf」をメディアライブラリから削除して、Redirectionプラグインでリダイレクト設定すればリダイレクトされる。
リダイレクト元ファイル「example.com/wp-content/uploads/2024/11/file01.pdf」を削除して存在しないURLにすることが重要だ。

静的ファイル(.pdf, .jpg, .png etc)はなぜRedirectionプラグインでリダイレクトできないのか。
これはApacheに限らずWebサーバーの基本的なリクエスト処理によるためだ。
多くのWebサーバー(Apache、Nginxなど)は、パフォーマンスを最適化するために静的ファイル(.pdf, .jpg, .png など)へのリクエストを直接処理します。
つまり、下記のようなことになります。
.pdf
などの静的ファイルはサーバーによってそのまま返され、PHPの処理を通らない。- Redirectionプラグイン の設定でのリダイレクトは、PHPまたはApacheのルールを経由する必要があるが、静的ファイルのリクエストはこの処理をバイパスしてしまう。
Webサーバーは、下記のように動作するのでリダイレクト元の静的ファイルを削除すればRedirectionプラグインが動作しなかったのである。
- 実際のファイルが存在するか確認(「/wp-content/uploads/2024/11/file01.pdf」)。
- ファイルが存在すれば、直接そのファイルを返す(この時点でPHPや
.htaccess
のRewriteルールを通らない)。 - ファイルが存在しなければ、次に
.htaccess
のルールや PHP に処理を渡す。
Redirectionプラグインでもそのようなことが書いてあった。公式ドキュメントは偉大です。