rewrite」についてまとめています。rewrite【mod_rewrite】正規表現スポンサードリンク【mod_rewrite】正規表現mod_rewriteでよく使用する正規表現をまとめています。マッチングだけを行い、置換は行わない)。アクセス禁止の時などに使用する。「C」フラグとともに使用することで、置換をせずに複数のパターンを適用することができる。上記の正規表現を利用すればmod_rewriteでの複雑なURL書き換えが可能になります。ここでは正規表現の使用例を紹介したいと思います。正規表現の使用例を紹介する前に、環境を定義しておきます。「http://○○○.com/abc/hoge.html」でアクセスがあった場合、「/var/www/html/○○○/abc/hoge.html」が出力されます。以下の記述を見て欲しいのですが、ドット「.」の前にエスケープ処理する「\」があることがわかります。^http(s)?://(www\.)?ysklog\.netこれは、正規表現の「.」とURLの「.(ドット)」を区別するためのエスケープ処理です。「○○○.com」からのアクセスを特別に処理させたい場合、RewriteCondはこのように記述します。^http(s)?://(www\.)?○○○\.comこれは次のようなことがあるからです。「http://○○○.com」でアクセスした場合、「%{HTTP_REFERER}」は「http://○○○.com」となります。「http://www.○○○.com」でアクセスした場合、「%{HTTP_REFERER}」は「http://www.○○○.com」となります。「https://○○○.com」でアクセスした場合、「%{HTTP_REFERER}」は「https://○○○.com」となります。このように、サブドメインのありなし、暗号化通信(https)のありなしで「%{HTTP_REFERER}」に渡るものが異なるので「(」と「)」でグループ化を行い、その0回または1回の出現を指定する「?」が必要となります。行頭を意味する「^」の使用ミスについて例えばルートディレクトリに以下を記述した「.htaccess」を記述したとします。[R=301,L]このとき、「http://ysklog.net/server/1392.html」からアクセスすると、一見「http://www.google.co.jp/」に301リダイレクトされそうですが、これは実行されません。「http://ysklog.net/server/1392.html」からのアクセスであった場合、「%{HTTP_REFERER}」は「http://ysklog.net/server/1392.html」となります。これは「^ysklog\.net」とマッチしません。先頭を指定する「^」のあとに「ysklog\.net」が続いているからです。この場合、次のようにしなければなりません。^http(s)?://(www\.)?ysklog\.net(.*)について「(.*)」は最もよく使われる正規表現パターンです。abc/$1例えば「http://○○○.com/hoge.html」にアクセスがあった場合、RewriteRuleのパターン部分には「hoge.html」が渡ります。「^」は行頭、「$」は行末を表しますが、「.*」はあらゆる文字列を表現できるので「^(.*)$」と「hoge.html」はマッチします。このとき「(」と「)」の間はグループ化されており、「(.*)」は「hoge.html」となり、後方参照されます(つまり「$1」の部分が「hoge.html」となる)。「http://○○○.com/hoge.html」にアクセスがあった場合、「/var/www/html/○○○/abc/hoge.html」のファイルが出力されるようになります。後方参照について上で後方参照という言葉が出てきましたが、言葉での説明は難しいのでもう一つ例を出したいと思います。def/$1例えば「http://○○○.com/abc/hoge.html」にアクセスがあった場合、RewriteRuleのパターン部分には「abc/hoge.html」が渡ります。「.*」は「abc」の部分、「(.*)」は「hoge.html」の部分に対応します。このとき「(.*)」はグループ化されており、後方参照されます。「def/$1」の部分が「def/hoge.html」となります。「http://○○○.com/abc/hoge.html」にアクセスがあった場合、「/var/www/html/○○○/def/hoge.html」のファイルが出力されます。※一つ目の「.*」は「()」で囲まれていません。二つ目の「.*」は「()」で囲まれているので、後方の「$1」にはこれが代入されます。test/$1これは、正規表現を使うと次のようにコンパクトにすることができます。test/hoge.html「[0-9]」は、0~9のいずれかの数字を表します。「20[0-9][0-9]」は2000~2099の数字(文字列)を表現しています。上は次のようにもできます。test/hoge.html{2}は、直前の表現を2回繰り返すことを表しています。405コメントまだコメントはありません。