備忘録その2。 (.htaccess に書く場合)
内容が間違っている可能性もありますので、ご参考まで。
RewriteBase はリライト後のベースを指定する
昔は RewriteBase が何なのかよくわからず、おまじない的につけていたこともありました。
RewriteBase は、**リライト後**のURLベースを指定します。例えばサーバ定義にて、
Alias /hoge "C:\temp"
となっていた場合、ホストが hoge.test とすれば、C:\temp\abc.html があれば http://hoge.test/hoge/abc.html としてアクセスできます。
このとき C:\temp\\.htaccess の RewriteRule で以下のようにしたとします。(C:\temp\def.html は存在する)
RewriteRule abc.html def.html
すると abc.html にマッチして def.html にリライトされますが、これは意図したようには動作しません。
これは、リライト時には、ローカルパスのプリフィックス(=ベース部分、この例でいえば C:\temp)を除外してルールの適用が行われるためです。
この場合は、以下のように書かなければなりません。
RewriteRule abc.html /hoge/def.html
複数の RewriteRule があるとき、/hoge をいちいちつけるのは面倒ですし、/hoge から /foo に変わった場合には変更するのも手間です。
ここで C:\temp へは /hoge でアクセスしているということを示すために、RewriteBase を使用します。
つまりこうです:
RewriteBase /hoge RewriteRule abc.html def.html
このようにすると意図どおりに、http://hoge.test/hoge/abc.html へのアクセスで C:\temp\def.html が表示されます。