訳あって使おうと思ったんだけど結局使わずじまい。
だけどせっかくいろいろ試したのでメモを残しておく。
そもそも mod_rewrite って何?
Apache にアクセスがあった時に行われるパスの変換に対してフックを仕掛けて干渉するモジュール。
たとえば Redirect を使って
Redirect permanent /hoge http://www.example.com/foobar
とすると、http://www.example.com/hoge/ へのアクセスが http://www.example.com/foobar/ に転送されます。
これは URL→URL 変換の例。
たとえば Alias を使って
Alias /somewhere /var/www/some
とすると http://www.example.com/somewhere へのアクセスに対しては、ディスク上の /var/www/some が表示されます。
これが URL→file 変換の例。
こんな変換をもっと高機能にできるのが mod_rewrite。
使い方
たとえば ~hossy/public_html/.htaccess にこんな内容を書きます。
RewriteEngine on RewriteBase /~hossy RewriteRule ^hoge.html$ foo.html
これで http://www.example.com/~hossy/hoge.html にアクセスすると...
- /~hossy/hoge.html へのリクエストが発生する
- UserDir によって ~hossy/public_html/hoge.html に変換される
- .htaccess で mod_rewrite を使うと、ファイルパスが取り去られて hoge.html になる
- RewriteRule によって foo.html に書き換えられる
- 相対パスなのでカレントパスが追加されて ~hossy/public_html/foo.html になる
- カレントパス ( ~hossy/public_html ) を RewriteBase ( /~hossy ) に置換すると /~hossy/foo.html になる
- というわけで /~hossy/foo.html へのリクエストを内部的に生成する
という順でリクエストがすり替えられます。
使い方その2
今度は ~hossy/public_html/.htaccess にこんな内容を書きます。
RewriteEngine on RewriteBase /~hossy RewriteRule ^hoge.html$ /foo.html
転送先が絶対パスになりました。そうすると...
- /~hossy/hoge.html へのリクエストが発生する
- UserDir によって ~hossy/public_html/hoge.html に変換される
- .htaccess で mod_rewrite を使うと、ファイルパスが取り去られて hoge.html になる
- RewriteRule によって /foo.html に書き換えられる
- カレントパス ( ~hossy/public_html ) を RewriteBase ( /~hossy ) に置換…できないのでそのまま
- というわけで /foo.html へのリクエストを内部的に生成する
という順でリクエストがすり替わります。
ふぅ。疲れたので今日はここまで。