WordPressのパーマリンクスタイルを元に301リダイレクトで利用できるhtaccessでの正規表現方法をご紹介します。
ワードプレスでは様々なパーマリンクが設定できますが、ドメインの変更やSSL化対応などでURLを変更せざる負えない事は多々発生します。
しかしながら、何も対処せずにURLを変えてしまうと今までのページの評価は引き継がれず、また1からGoogleによる評価を受けなければなりません。
そのようなことを防ぐために作られているのが301リダイレクトという機能です。今回はワードプレスで代表的に使われているパーマリンクスタイルを元に汎用性が高い正規表現をご紹介してきます。
WordPressのパーマリンクスタイルを元に301リダイレクトで利用できるhtaccessでの正規表現方法をご紹介します。。
リダイレクトで利用できる正規表現をご紹介する前にレダイレクトの種類をご紹介します。利用目的によって使うべき種類が変わってくるので、分からない方は参考にしてみてください。
ちなみにリダイレクトとは、あるURLにアクセスがあった時に、違うURLに自動的にジャンプさせる機能だとざっくり考えてください。
下記以外にも303リダイレクトや307リダイレクト、JavaScriptを用いたリダイレクト方法もありますが、メジャーでないので割愛します。
301 リダイレクト Permanent Redirect(恒久的な転送)
301リダイレクトは、恒久的にページを移動させる時に使用します。SSL化への対応や、サイトの再構築などの際に古いアドレスはもう今後一切使わず、新しいアドレスに以降させたい時によく使われます。
301リダイレクトはキャッシュの情報も元のアドレスから引き継げる他、ページランクも引き継いでくれるため、アドレス変更による検索順位の下落がなくなります。
302リダイレクト Temporary Redirect(一時的な転送)
302リダイレクトは一時的にページを移動させたい時に使用します。元のページを改修したい時などに、一時的に他のページに移動してもらう等の使い方をします。
302リダイレクトはキャッシュを引き継がない他、ページランクも引き継がないため、移動先のページは元のページと同様な検索順位を得ることができません。
301リダイレクトを行う方法
301リダイレクトを行うために、一般的なのが .htaccess というファイルに処理を書き込む方法です。
.htaccessファイルに必要な処理記述を書き込み、FTPソフトを使ってWebサーバーに送信することでリダイレクトが反映されます。
ワードプレスでの.htaccessファイルのディレクトリ
ワードプレスではルートディレクトリ直下にあるpublic_htmlの中に.htaccessファイルが存在します。
リダイレクトの基本的な記述方法
リダイレクトをする際の基本的な記述方法を紹介します。
RewriteEngine On RewriteCond %{REQUEST_URI} 移転前のパス RewriteRule ^(.*)$ 移転後のバス [R=301,L]
ドメイン内であるページから新しいページへとリンクを飛ばしたい場合は以上のような書き方をします。
RewriteEngine On
RewriteEngine Onで今からURLを書き換えますよ、という宣言をします。
RewriteCond %{REQUEST_URI} 移転前のパス
RewriteCondでは書き換えるための条件を書くことができます。他の言語でいうIF構文と同じです。ちなみにCondはConditionの略で”条件”という意味です。
%{REQUEST_URI}ではドメイン以下のディレクトリの条件を示しています。当サイトであれば、”https://fflove.info”以降のアドレスの差します。
RewriteRule ^(.*)$ 移転後のパス [R=301,L]
RewriteRuleではRewriteCondの条件で当てはまるページを実際に書き換えるためのルールを示しています。
^(.*)$はすべての文字列を表していて(正規表現)、RewriteCondの条件で当てはまるすべてのページが”移転後のパス”へジャンプさせるという構文になっています。
これら以外にも正規表現は色々な書き方やルールがあるので以下のページが分かりやすく書いてあるので参考にしてみてください。
[R=301,L]ではこの移転後のパスは301リダイレクトですよ、というのを表しています。お気づきかと思いますが、301を302に変えれば302リダイレクトになります。また、LはLastのLで、ここでこの処理はおしまいというのを表しています。
ワードプレスでよく使うリダイレクトの表現
基本の構文はお分かり頂けたと思うので、実際にワードプレスでよく使われるリダイレクトを正規表現の方法も含めてご紹介していきます。
SSL化した際のリダイレクト表現
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
SSL化した際に使われる301リダイレクト表現の一例です。RewriteCond %{HTTPS} !onでhttpsでなければ書き換えるという条件になっており、SSL化した際にhtaccessファイルに書き込む記述表現です。
{HTTP_HOST}では所謂ドメインが返され、%{REQUEST_URI}ではドメイン以下のディレクトリ情報が返されます。
同様にドメインを変更した場合は、{HTTP_HOST}の部分を手打ちで新しいドメインに変えてやればリダイレクトを行うことができます。
RewriteEngine On RewriteRule ^(.*)$ https://新しいドメイン名%{REQUEST_URI} [R=301,L]
ワードプレスのパーマリンク表現を変更
サイトの再構築を行いワードプレスのパーマリンクの表現形式を変更したい場合にも、301リダイレクトは利用できます。
代表的なワードプレスでのパーマリンクは以下のような種類がありますが、”日付と投稿名”から”月と投稿名”に変えたりすることが可能です。(「設定-パーマリンク設定」より選択できます。)
以下ワードプレス内でURLの表現方法は簡単に変更できますが、変更してしまうとページ評価が引き継がれないので、必ず301リダイレクトは設定するようにしましょう。
”日付と投稿名”から”月と投稿名”へ
RewriteEngine On RewriteCond %{REQUEST_URI} ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ /$1/$2/$4 [R=301,L]
”日付と投稿名”から”月と投稿名”へ変更させる際に使える表現です。([0-9]{4})は4桁の数字を表しています。([0-9]{2})は2桁の数字です。
$はRewriteRuleで書いた条件内容を引き継ぐことができる記述方法です。$1は一つ目の括弧の内容を$2は二つ目の括弧の内容を表しています。
”日付と投稿名”から”投稿名”へ
RewriteEngine On RewriteCond %{REQUEST_URI} ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ /$4 [R=301,L]
”日付と投稿名”から”投稿名”へ変更させる際に使える表現です。内容は上記と同様で$4では四つ目の括弧の内容を表しています。
”月と投稿名”から”投稿名”へ
RewriteEngine On RewriteCond %{REQUEST_URI} ^/([0-9]{4})/([0-9]{2})/(.*)$ RewriteRule ^([0-9]{4})/([0-9]{2})/(.*)$ /$3 [R=301,L]
”月と投稿名”から”投稿名”へ変更させる際に使える表現です。内容は上記と同様で$4では四つ目の括弧の内容を表しています。
”基本”から”数字ベース”へ
RewriteEngine On RewriteCond %{REQUEST_URI} ^(?p=)(.*)$ RewriteRule ^(?p=)(.*)$ /archives/$2/ [R=301,L]
”基本”から”数字ベース”へ変更させる際に使える表現です。
条件の重ね合わせが可能!
上記に紹介した方法を用いてワードプレスの各ページに対する301リダイレクトを設定することが可能です。
しかしながら、ワードプレスの中には固定ページは違う表現方法だったりと様々なURLが混在していることもあるはずです。
安心してください。これらのリダイレクトの条件は重ね合わせて何個でも記述することが可能です。一例として、このサイトの301リダイレクトの一部を紹介します。
RewriteEngine On RewriteCond %{HTTPS} !on RewriteCond %{REQUEST_URI} ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ https://%{HTTP_HOST}/$4 [R=301,L] RewriteCond %{HTTPS} !on RewriteCond %{REQUEST_URI} !(^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$) RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCondは重ね合わせて使用することが可能です。上記の場合RewriteCond %{HTTPS} !onかつRewriteCond %{REQUEST_URI} ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$の条件に合うものは
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ https://%{HTTP_HOST}/$4 [R=301,L]
上記の書き換え方法を、それ以外でSSL化されていないリクエストは以下のような書き換えを行うという記述が可能です。
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これによって固定ページと投稿ページを別々の条件で一括301リダイレクトを送信することができます。
まとめ
ワードプレスのパーマリンク表現を変えた際には正規表現を使うことで一括して301リダイレクトを送信することができます。
一点注意事項ですが、URIを変更する際に規則性の無い文字を新たに追加したりすることは難しいので、現状を簡略化する場合やディレクトリを規則的に変更する場合に正規表現が効果を発揮することを念頭に置いておきましょう。