webcreate
.htaccss, Location
2008-08-26 18:57
検索結果を.cgiや.phpという拡張子ではなく、.htmlに飛ばして表示したかった。PHPだとそういった機能があるようだけど、Perlはないようなので、.htaccessとLocationで行う。そのメモ。
■概要
index.htmlで「foo」を検索すると
./db/foo.html
というファイルが表示される。
実際は「db」というフォルダはないが、.htaccessであるように偽装する
■ファイル説明
.htaccess / 動的ファイルを静的ファイルに偽装する
index.html / トップページ。Fromのactionはsearch.cgi
search.cgi / 変数を静的ファイル名として飛ばす
db.cgi / 検索結果を表示するプログラム
■方法
.htaccess
RewriteEngine on
RewriteOptions MaxRedirects=1
# サブドメインで使用する場合はチェックを外す
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# ./db/foo.htmlを開けと要求があったらdb.cgi?q=fooを実行する
RewriteRule ^db/(.*)\.html$ db.cgi?q=$0 [L]
index.html
<html>
<body>
<form action="search.cgi">
:
</form>
</body>
</html>
search.cgi
#!/usr/bin/perl
use strict;
use CGI;
my $q = CGI->new();
my $TARGET = $q->param('q');
print "Location:db/$TARGET\.html\n\n";
db.cgi
普通に検索プログラム
ここで問題が。db.cgi?q=fooで要求がくるはずだが、my $q = CGI->new();などを使って変数を取得しようとすると、日本語が文字化けする。utf8で送っているんだけど、なんでだろう?なので$ENV{'REQUEST_URI'}などから無理やり変数を取得した。
■動作サンプル
サイトを探す http://word.xrea.jp/
ここで何かを検索すると静的ファイルに飛ぶと思う。リフレッシュで飛ばしているわけじゃないので、ブラウザのバックボタンで戻っても問題ない。
こんな感じでおk
TrackBack URL for this entry:
http://www.qunea.com/mt/mt-tb.cgi/1737
Post a comment