ぱそくま ろご
Linux > Apache HTTP > mod_rewriteの使い方

mod_rewriteの使い方

mod_rewriteとは

mod_rewriteはリクエストされたURLを書き換える事ができます。実際には、以下のようなことができます。

  • ページの引越しのためのリダイレクト
  • 動的ページを静的ページのようにみせる
  • ある拡張子のファイルにアクセスしたら404 Not foundを返す
  • (等々)

また、URLの書き換える場合、条件を指定することもできます(例えばブラウザーがIEの時はあっちに飛ばすとか)。

必要なモジュール

mod_rewriteさえあればOKなので、redhat系はhttpd.confに設定を書くだけで、Debian系はa2enmodを使います。

mod_rewriteに必要なモジュール - Debian系

[paso ~]sudo a2enmod rewrite

mod_rewriteに必要なモジュール - redhat系

#/etc/httpd/conf/httpd.confの最初のほうに書く
#rewiteに必要なモジュール
LoadModule rewrite_module modules/mod_rewrite.so


mod_rewiteの記述方法

mod_rewiteの記述方法は以下のようになります。

  • RewriteCond テスト文字列 条件 [フラグ]
  • RewriteCond テスト文字列 条件 [フラグ]
  • .
  • .
  • RewriteRule パターン 置換条件 [フラグ]

このように、RewriteRuleディレクティブ1つ以上に対して、RewriteCondが0以上が1セットとなります。 RewriteRuleが実際にURLを書き換える命令で、RewriteCondがRewriteRuleの適用条件となります。 なお、RewriteCondのフラグを省略するとAND条件になり、フラグにORと入れるとOR条件になります。

mod_rewriteを使ってみる

mod_rewriteは処理の順序や正規表現に慣れるまで時間がかかりますので、サンプルを見ながら覚えたほうがよいと思います。

ページの引越し

現行のサーバーにアクセスしたものは全てhttp://www.new-hoge.netにリダイレクトし、ステータスコード301(恒久的移動)を返す。

RewriteRule ^/(.*)$ http://www.new-hoge.net/$1 [R=301,L] 

付録A-正規表現

RewriteRuleに使用する正規表現の一覧です。

メタ文字(文字位置の指定)
記号説明記述例記述例の意味
^ 文字列の先頭を表します。 ^/aiueo /aiueoで始まる文字列
$ 文字列の終端を表します。 jpg$ jpgで終わる文字列
メタ文字(テキスト)
記号説明記述例記述例の意味
. 任意の一文字。 aiu.o aiuとoの間に1文字ある。例えばaiueoやaiue1o
[chars] charsで指定されている文字のどれか。 [0aS]
[0-9]
[0-9A-Za-z]
0またはaまはたSの文字と一致するもの。
0~9のどれか(数値に一致する)。
英数字に一致する。
? 直前の文字を0か1回繰り返す。 ^/image.?/$
/imagea/や/imagea1/など
* 直前の文字を0以上繰り返す。 ^/image/.*\.jpg$
/image/で始まり、.jpgで終わるもの(/image/aiu.jpgや/image/hoge/123.jpgなど)

付録B-RewriteRuleの行末のオプション

RewriteRuleの行末
[R=[code]]Redirect=[code]を指定しないと、HTTPレスポンスの302(MOVED TEMPORARILY)が使用されます。完全に別サイトに移行したい場合などは、[R=301]と指定しましょう。ちなみに[code]は300-400が指定できます。
[F]forbidden強制的にアクセス禁止します。クライアントには403ステータスを返します。
[G]goneURLを強制的に消去済みにします。クライアントには410ステータスを返します。
[C]chain書き換え処理に該当した場合、次の書き換え処理に移ります。ここでマッチしないと後続のすべてのRewriteRuleはスキップされます。
[L]Last書き換え処理に該当した場合、書き換え処理はここで終了という意味です。これがないと次のRewriteRuleに移ります。
[P]ProxyProxyPassディレクティブと同じ動作をします。
[QSA]QueryStringAppendクエリ・ストリング(URLの?以降(パラメタ)文字列)を書き換え後のURLにも付加します。