昔作ったブログ(WordPress)で、パーマリンクが「年/月/日/記事タイトル/」になっているものがありました。記事の内容と日付は大して関係がないので変えようと思い、やってみました。「記事タイトル」だけでもいいのですけど、なんとなく「年」は残して「年/記事タイトル/」にします。
WordPressの設定
元々はこうです。
これを、こうします。
「%monthnum%/%day%/」を抜くということです。
これで保存すればWordPressの設定は完了。新しく書いた記事も古い記事も、新たなURL(パーマリンク)でアクセスできます。
しかし、問題があります。旧URLでリンクしているところからは辿れないことです。当然ですよね。Googleの検索結果に表示されるのも旧URLです(新しいURLがインデックスされるまでは)。
.htaccessで301リダイレクト
そこで使うのがリダイレクト。旧URLでアクセスされたら、新URLに自動転送します。このときに、URLが変更になったということを明示するために301というステータスを付けます。これで、検索エンジンはインデックス情報のURLを置き換えてくれます(そうしないと、旧URLと新URLの二つがインデックスされて、旧URLではアクセスできないという状態になります)。
URLが変更になる記事が一つとか少数なら記事ごとに対策すればよいのですけど、サイト全体なのでそういうわけには行きません(面倒すぎます)。そこで、.htaccessを使ってまとめて処理します。
.htaccessを使ったリダイレクトの書き方はたくさんのサイトで説明されています。例えばこちら。
今回は、 「年/月/日/記事タイトル/」から「/月/日」を抜いて「年/記事タイトル/」にするので、次のように書きます。
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)/$ /$1/$4/ [R=301,L]
「RewriteRule」は文字通り、リライトのルールです。この後ろに続けてルールを示すということです。
そして、そのルールは正規表現を使って書きます。何やら暗号のようですが、バラして考えれば簡単。前半が書換え前の元のパターンです。
「/」があってその次の一つ目の「 ([0-9]{4}) 」は「0~9」つまり数字が四つつながっいるものを表します。要するに、「年」です。また、このカッコでくくったものが正規表現によるパータン1です。←ここ、重要です。あとで出てきますので。
そして、「/」に続いて先ほどと同様に「 ([0-9]{2}) 」 で数字二桁の「月」を表します。パターン2です。
もう一つ同じく、 「/」に続いて先ほどと同様に「 ([0-9]{2}) 」 で数字二桁の「日」を表します。パターン3です。
さらに、「/」に続いて、「(.*)」は、任意の文字(.)の0回以上の繰返し(*)を表します。つまり、「記事タイトル」の部分です。これがパターン4です。
そして、後半。こちらは書換え後のパターンを定義しています。「$1」は書換え前のパターン1をそのまま使うことを表します。したがって、「年」が入ります。同様に「$4」はパターン4ですから記事タイトルが入ります。
結果、 「年/月/日/記事タイトル/」が「年/記事タイトル/」 になるわけです。
.htaccessにこのよう書いて、実際に旧URLでアクセスして、新URLに飛び、ちゃんと記事が表示されることを確認すれば作業終了です。