URL Rewriting

URL Rewriting に関するメモ。

Apache の VirtualHost を使って、複数ドメインを立てているときに、
あるドメインのサイトへアクセスしてきたのを、
別のドメインの別のパスに飛ばしたい、という要件が出てきた。

URL Rewriting が使えそうだ、ということでやってみた。

1.     RewriteEngine On
2.     RewriteLog /var/log/httpd/rewrite.log
3.     RewriteLogLevel 3
4.     RewriteRule ^/$ /modules/hoge/ [L]
5.     RewriteCond %{REQUEST_URI} !^/$
6.     RewriteRule ^/(.*)$ /modules/hoge/$1 [N,PT]

1行目の RewriteEngine を On にしないと効かないので注意。
特に、VirtualHostの場合、メインの設定は引き継がれないので要注意。

2,3行目は URL書き換えのデバッグログの場所とレベル。
コレがないと設定のデバッグがきつい。レベルはとりあえず3くらいだせば十分かと。
テストが終わったら、0にしておくこと。

4行目で、ルールの設定。
あるホストに "/" にアクセスした場合、/modules/hoge/ に書き換える。
フラグの [L] は、これで書き換え終了して抜ける、という意味。
これがないと次のルールが適応されて、無限ループしてしまいます。

5,6行目では "/foo/bar.html" とかで来たものを、
"/modules/fuga/foo/bar.html" へ書き換える設定。
5行目では、このルールが適応されるのは、リクエストURLが "/" でない場合のみ
という設定。

ポイントは、RewriteCond。
おそらく、Rewrite Condition の略なのでしょう。
RewriteRule で書き換える条件を、RewriteRuleの前に複数定義することができる。
あとはRuleのフラグが難しい。それについては以下を参照。
http://net-newbie.com/trans/mod_rewrite.html#RewriteRule

参考