ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

Apache 2.2, mod_rewrite

訳あって使おうと思ったんだけど結局使わずじまい。
だけどせっかくいろいろ試したのでメモを残しておく。

そもそも 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 にアクセスすると...

  1. /~hossy/hoge.html へのリクエストが発生する
  2. UserDir によって ~hossy/public_html/hoge.html に変換される
  3. .htaccessmod_rewrite を使うと、ファイルパスが取り去られて hoge.html になる
  4. RewriteRule によって foo.html に書き換えられる
  5. 相対パスなのでカレントパスが追加されて ~hossy/public_html/foo.html になる
  6. カレントパス ( ~hossy/public_html ) を RewriteBase ( /~hossy ) に置換すると /~hossy/foo.html になる
  7. というわけで /~hossy/foo.html へのリクエストを内部的に生成する

という順でリクエストがすり替えられます。

使い方その2

今度は ~hossy/public_html/.htaccess にこんな内容を書きます。

RewriteEngine on
RewriteBase /~hossy
RewriteRule ^hoge.html$ /foo.html

転送先が絶対パスになりました。そうすると...

  1. /~hossy/hoge.html へのリクエストが発生する
  2. UserDir によって ~hossy/public_html/hoge.html に変換される
  3. .htaccessmod_rewrite を使うと、ファイルパスが取り去られて hoge.html になる
  4. RewriteRule によって /foo.html に書き換えられる
  5. カレントパス ( ~hossy/public_html ) を RewriteBase ( /~hossy ) に置換…できないのでそのまま
  6. というわけで /foo.html へのリクエストを内部的に生成する

という順でリクエストがすり替わります。

ふぅ。疲れたので今日はここまで。