.htaccessのリダイレクトにて正規表現を使ったのでそのことについてまとめてみました。
正規表現とは
ある規則に従って特定の文字列の文字の並び方を表現する表記法です。
「先頭の文字が○」や「終わりが○」など複雑な条件を記述することができ、リダイレクトする場合などに便利です。
.htaccessのリダイレクトでよく使う正規表現
「^」は文字の始まりを表します。
1 2 |
RewriteEngine on RewriteRule ^example01\.html$ https://www\.〇〇\.com/example02\.html [L,R=301] |
上記はページ単位のリダイレクトになります。
この場合だとexample01.htmlにアクセスした時にhttps://www.〇〇.com/example02.htmlにリダイレクトされます。
「.」は任意の1文字を表します。
1 2 |
RewriteEngine on RewriteRule ^example01(.*)$ /example02$1 [L,R=301] |
上記はディレクトリ単位のリダイレクトになります。
この場合だとhttps://www.〇〇.com/example01/にアクセスした時にhttps://www.〇〇.com/example02/にリダイレクトされます。
「\.」は「.(ドット)」を表します。
「\(バックスラッシュ)」はエスケープ文字と言います。
「.(ドット)」は正規表現だと任意の1文字という意味をもっていますので、それをURLの「.(ドット)」として認識させるのにエスケープ文字を使います。
「(文字列)」はグループ化を表します。
1 2 |
RewriteEngine On RewriteRule ^(.*)$ abc/$1 |
上記のリダイレクトはhttps://www.〇〇.com/example01.htmlにアクセスした場合はhttps://www.〇〇.com/abc/example01.htmlにリダイレクトされ、
https://www.〇〇.com/example02.htmlにアクセスした場合はhttps://www.〇〇.com/abc/example02.htmlにリダイレクトされます。
「$1」は後方参照を表します。
上の「(文字列)」のソースコードを例にして説明すると、https://www.〇〇.com/example01.htmlにアクセスした場合(.*)はexample01.htmlになり「abc/」の後ろにexample01.htmlが出力されるという考えになっています。
「|」はorを意味します。
1 2 3 |
RewriteEngine On RewriteRule ^(.*)\.html$ abc/$1 RewriteRule ^(.*)\.jpg$ abc/$1 |
上記でも正常にリダイレクトが働きますが「|」を使用することによってコンパクトにできます。
1 2 |
RewriteEngine On RewriteRule ^(.*)\.(html|jpg)$ abc/$1.$2 |
「$1.$2」とありますがこれはグループの中の順番を表しています。「$1」は「()」内の1番目、「$2」は「()」内の2番目を表しています。
「!」は否定を表します。
特定のディレクトリを除いてリダイレクトする際などに使われます。
「[0-9]」は0〜9のいずれかの数字を表します。
1 2 |
RewriteEngine On RewriteRule ^20[0-9][0-9]\.html$ abc/example01.html |
この場合だとhttps://www.〇〇.com/2000〜2099にアクセスした時にhttps://www.〇〇.com/abc/example01.htmlにリダイレクトされます。
「{n}」は繰り返しを表します。
1 2 |
RewriteEngine On RewriteRule ^20[0-9]{2}\.html$ abc/example01.html |
リダイレクトの結果は前回と同じです。
「{2}」と書いてあるため「[0-9]」を2回繰り返したという結果になります。
まとめ
今回は正規表現の一部を紹介させてもらいました。
正規表現を使えばサイトの引越しや複数のページのリダイレクトを1〜2行で済ませられます。
まだ他にも.htaccessで使える正規表現がありますので気になる方は是非調べてみてください。