[nginx] WordPressでパーマリンク変更をした時のリダイレクト設定

WordPressのパーマリンク設定を変更したら、リダイレクトの設定をサーバー側(もしくはプラグイン)でする必要があります。

今回は、nginxでリダイレクト設定をする時の

目的:旧URLから新URLに301リダイレクトする

nginxのrewriteを使って301リダイレクト(恒久的なリダイレクト)をしてみます。

「数字ベース」から「カスタム構造」に変更した時などには、忘れずにリダイレクトしておきたいです。

記事ページに関しては、

(旧) http://web-tsukuru.com/archives/123
(新) http://web-tsukuru.com/123

また、タグを設定していたので、

(旧) http://web-tsukuru.com/archives/tag/tag-name
(新) http://web-tsukuru.com/tag-name

とリダイレクトするように設定します。

解決策:default.confにrewriteルールを追記

nginxの設定ファイルがある/etc/nginx/conf.dにあるdefault.conf(*1)に設定を追記します。

serverブロック内にlocationディレクティブを追記し、その中にrewriteルールを設定することでリダイレクトできます。

*変更する設定ファイルはサーバーによって変更してください。

vi /etc/nginx/conf.d/default.conf

Proxy Cacheを使っているので、ポート80のほうのserverブロックに以下のように追記します。

location ~ /archives/ {
    rewrite ^/archives/(.*)$ /$1 permanent;
}

locationで/archives/以下をリダイレクトするように設定。リライトルールは以下のように記述します。

rewrite リダイレクトするディレクトリ リダイレクト先 リダイレクトの種類;

今回、リダイレクトするディレクトリはarchives/%post_id%とarchives/tag/%tag%なので、^/archives/(.*)$とする。

()$で囲った部分は、$1のように変数として使用できます。リダイレクト先は今回ドメイン直下にしたので、/$1というように変数を使って指定します。

具体的には、/archives/123にアクセスがきた場合は$1変数には「123」がはいり、/123にリダイレクトされます。

追記したらnginxを再起動すればリダイレクトの設定は完了です。

service nginx restart