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