WordPressでカテゴリーベースを設定した後の.htaccess設定

基本的な話なんだけど、WordPressにはカテゴリーベース、タグベースという設定があります。カテゴリーやタグのページを任意のURLに設定できるようになります。当サイトのように漫然と運営してきて、ある日突然変更するとURLが変わってしまい、色々と残念なことになります。そのため、変更したら古いURLから新しいURLへ誘導してあげるのが得策です。今回はそれを.htaccessにmod_rewriteの設定を入れて対応します。

ところで、カテゴリーベースとタグベースとはどういうものでしょうか。Codexの日本語版を引用しておきます。

  • カテゴリーベース – カテゴリーアーカイブ URL のカスタム接頭辞。空欄のときは初期値 category (http://example.org/category/カテゴリスラッグ/
  • タグベース – タグアーカイブ URL のカスタム接頭辞。空欄のときは初期値 tag (http://example.org/tag/タグスラッグ/)

情報源: 管理画面/パーマリンク設定 – WordPress Codex 日本語版.

こんなことを書いていますが、実際のところ、空欄設定で /category/カテゴリスラッグ/ にアクセスしてもカテゴリーのページにはなりません。どこかの設定のせいかもしれませんが、そのカテゴリーの一番最近の記事へリダイレクトされます。

空欄の時の動きが正しいかはどうでもいいのですが、空欄設定でのカテゴリーのURLは /archives/category/カテゴリスラッグ/ になっています。そのままでも実用上は全く問題ないのですが、自分的には /categories/カテゴリスラッグ/ になってほしいので、カテゴリーベースとタグベースを設定しました。

設定は管理画面でちょいと設定するだけ。カテゴリーベースに categoris を設定すると /categories/カテゴリスラッグ/ のURLが有効化し、タグベースに tags を設定すると /tags/タグスラッグ/ のURLが有効化します。完了。

そこまでは良かったのですが、そのままにしておくと古いURLでアクセスしてきちゃった人が404 Not foundになってしまい、ページを見てもらえなくなります。そこでやっと本題のリダイレクトが出てきます。

RewriteRule ^archives/category/(.*) categories/$1 [L,R]
RewriteRule ^archives/tag/(.*) tags/$1 [L,R]

これで古いURLは新しいURLへリダイレクトされます。書く.htaccessはWordPressのやつ。index.phpの行の手前に書くといいかな。.htaccessの内容をWordPressに委ねている人は何か対策をしなきゃいけないかな。それは、自分で調べてください。