さくらインターネットで動的HTMLを静的なURLに見せるApache mod_rewriteモジュールを使ってみた
Apacheのモジュールの一つ、mod_rewriteでURLを書き換えて遊んでみた。
とりあえず、忘れないうちにメモ書き。
詳しいmod_rewriteの解説はこちら。
まずは次の環境を用意。
.htaccessは次のように書いてみた。
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)\.html$ test.cgi?q=$1
test.cgiの中身は以下の通り。
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
実在しないディレクトリ等を指定することも出来る。
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」というディレクトリを作成し、次のように配置した。
.htaccessは次のとうり。CGIはリネームのみ。
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サーバ管理者のためのレシピ集 笹井 崇司 オライリージャパン 2008-09-26 売り上げランキング : 80425 おすすめ平均 ![]() 著者のセンス! 構築のレシピ集Amazonで詳しく見る by G-Tools |
トラックバック(0)
トラックバックURL: http://type-y.com/mt/mt-tb.cgi/1215


著者のセンス!
構築のレシピ集
コメントする