さくらインターネットで動的HTMLを静的なURLに見せるApache mod_rewriteモジュールを使ってみた

Apacheのモジュールの一つ、mod_rewriteでURLを書き換えて遊んでみた。
とりあえず、忘れないうちにメモ書き。
詳しいmod_rewriteの解説はこちら

まずは次の環境を用意。

root1.jpgtest1.labo.type-y.com
text2.jpg.htaccess
text1.jpgtest.cgi

.htaccessは次のように書いてみた。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)\.html$ test.cgi?q=$1

test.cgiの中身は以下の通り。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "\n";
print "QUERY_STRING: $ENV{'QUERY_STRING'}
\n";
print "\n";

やってることは非常に単純で、次のURL
http://test1.labo.type-y.com/aaa.html
にアクセスした際、「/」から「.html」までの間をコピーして、「test.cgi?q=」の後にくっつけてる。
そのため、CGIには「q=aaa」という文字が入力されているので、あとはこのクエリに対する動きをCGI側で行えば、一見静的HTMLのアドレスだけど、動的HTMLで書き出せるみたい。
つまり、次のアドレスにアクセスしているのと同じことになる。
http://test1.labo.type-y.com/test.cgi?q=aaa


実在しないディレクトリ等を指定することも出来る。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/folder0/(.*)\.html$ test.cgi?q=$1

この場合、アクセスしているアドレスは
http://test1.labo.type-y.com/folder0/aaa.html
になるが、実際は
http://test1.labo.type-y.com/test.cgi?q=aaa
のアドレスを参照しているのと同じになる。


1つ引っかかって3時間悩んだのは、ディレクトリをまたがるときの動きが微妙。
「folder1」というディレクトリを作成し、次のように配置した。

root1.jpgtest1.labo.type-y.com
root2.jpgfolder1
text4.jpg.htaccess
text3.jpgageage.cgi

.htaccessは次のとうり。CGIはリネームのみ。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)\.html$ /folder1/ageage.cgi?q=$1

この場合、
http://test1.labo.type-y.com/folder1/bbb.html
へアクセスした場合「bbb」とい文字が取れることを期待したけど、実際は次の文字列だった。
QUERY_STRING: q=home/euwai/www/test1.labo.type-y.com//folder1/bbb
RewriteRuleを使う場合は、ドメインのルートディレクトリを基準とした方がいいのかも。


んー、動きがいまいちつかめないけど、このmod_rewriteモジュールは使えるっ!
もう少し、使い方を洗礼しなければ。

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
笹井 崇司

オライリージャパン 2008-09-26
売り上げランキング : 80425

おすすめ平均 star
star著者のセンス!
star構築のレシピ集

Amazonで詳しく見る
by G-Tools

| コメント(0) | トラックバック(0) |
■Yahoo!オークション おすすめ商品■
Web Services by Yahoo! JAPAN

トラックバック(0)

トラックバックURL: http://type-y.com/mt/mt-tb.cgi/1215

コメントする