動的ページを静的な表現で表すメモ

GET型のURLを静的な表現でアパッチに誤認させる黒魔術が欲しかったのさ。

hogehoge.php?var1=foo&var2=bar
 ↓
foo-bar.html

いわゆるURLの偽装の方法だね。

術式

Apacheのモジュールにmod_rewriteと言う黒魔術があります。
結構イケテル黒魔術です。
まあ、入ってないと動かないって言うのはご愛敬。

.htaccessファイルに次の文章を入れる感じ

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-z]+)-([0-9a-z]+).html+ hogehoge.php?ver1=$1&var2=$2

もちろん、.htaccessだから最後は空の行が必須。

  1. 1行目:mod_rewriteを使うよって宣言
  2. 2行目:リクエストURLと同じファイルがあればそっちを出す。
  3. 3行目:リクエストURLと同じディレクトリ名があればそっちを出す。
  4. 4行目:実際の変換魔法の呪文正規表現とか必須っぽいよ?
    1. ^([0-9a-z]+)の部分で「foo-bar.html」を受け取った際の「foo」の部分を切り出す。変数名が$1になる。
    2. 次の-が「foo-bar.html」のハイフン部分
    3. 次の([0-9a-z]+)が「foo-bar.html」のbarの部分。変数名が$2になる。
    4. .htmlが「foo-bar.html」の最後の部分。どうせ偽装だし……。
    5. スペース以降の「hogehoge.php?ver1=$1&var2=$2」が実際に送られるURLの名前。

あと、この魔術、環境変数も扱えるのでルールの設定次第で2chから来た人はGoogleへジャンプさせたりなんて事も出来る様子。
実際の利用方法だと、環境変数が携帯電話ならmobile.phpにジャンプさせるとかと言う方法になるんだろうけどね。

RewriteEngine on


RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^/$ docomo/index.html [L]


RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR]
RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteRule ^/$ vodafone/index.html [L]


RewriteCond %{HTTP_USER_AGENT} KDDI [OR]
RewriteCond %{HTTP_USER_AGENT} UP\.Browser
RewriteRule ^/$ au/index.html [L]

こーんなかんじ?
所々の[OR]とか[L]ってのは、[OR]だと次の行とOR条件だよってこと、もちろん[AND]も使える。
[L]ってのは一旦ここで判断中止。break文だと思えばいいかな?