purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

RewriteRule 動的なページを静的なページに見せる

タグクラウドを作ることになったので

しばらく前の事例の.htaccessのソースをがんばって解読していこう。

1. Options +FollowSymLinks
2. RewriteEngine on
3. RewriteCond %{REQUEST_FILENAME} !-f
4. RewriteRule ^([0-9]{2})\.html$ http://%{HTTP_HOST}/hoge/list.php?page=$1 [L]
5. RewriteRule ^key_([0-9a-zA-Z_\-]+)\.html$ http://%{HTTP_HOST}/hoge/keyword.php?alpha=$1 [L]
6. RewriteRule ^([0-9a-zA-Z_\-]+)\.html$ http://%{HTTP_HOST}/hoge/detail.php?alpha=$1 [L]

※行番号は実際のソースには含まれない

1行目 Options +FollowSymLinks
 用はこのディレクトリにシンボリックリンクを貼ってもいいですよ ってことらしい
 これが無いとmod rewriteを使えないようだ
 ※追記:CPIだけらしい



2行目 RewriteEngine on
 mod_rewriteを使えるように宣言するといったことだろうか。
 とりあえずこれが無いとその後のが使えないっぽい



3行目 RewriteCond %{REQUEST_FILENAME} !-f
 ナイスなページがあった.htaccessにおける{REQUEST_FILENAME}の意味 : カフェ関連サイトのシステム開発日記
まずRewriteCondは、RewriteRuleの条件を設定するディレクティブ、とのこと。
 今回はREQUEST_FILENAMEってあるので、リンク先のファイル名ってことだろう。
 %{}のなかに書くっていう決まり事っぽい。!-fってのは「ファイルが存在しない場合」 。
ちなみに、!-dの場合は「ディレクトリが存在しない場合」



4行目 RewriteRule ^([0-9]{2})\.html$ http://%{HTTP_HOST}/hoge/list.php?page=$1 [L]
 RewriteRule=リライトルール って言葉そのまま。
 正規表現してファイル名がマッチしたら別のURLに飛ばす。


 今回は、0〜9の数字2文字+.htmlというファイルだったら、そのサイトの/hoge/list.phpにGETでpageってパラメタつけて飛ばすって意味。
 HTTP_HOSTってのは自分のドメインを取ってくる。みたいな意味。厳密には違うんだろうか。
 自分のドメイン名を取ってこれる。
 

 んで([0-9]{2})って所がカッコで囲まれているのでpage=$1の$1の部分にその値が入ってきます。
 例えば) 16.html なら、page=16 ってな感じだすね。



5行目とか6行目は4行目の応用だなーということでスルー 


で[L]って何?とか調べてたらマニュアルに全部書いてあったというオチ><
Apache : mod_rewriteリファレンス - Flash/Web Application Weblog Directory