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