CGIに関する質問です(たぶん)。

--hoge.cgi------------------------------
#!/usr/bin/perl
use CGI qw(param);
my $hoge = param('hoge');
print "Content-type: text/plain; charset=UTF-8\n\n";
print "$hoge";
----------------------------------------
↑のようなCGIをつくり、
http://localhost/foo/hoge.cgi?hoge=%E3%81%B5%E3%81%8C
でアクセスすると"ふが"が返ってくるのですが、
--.htaccess-----------------------------
DirectoryIndex /foo/hoge.cgi
RewriteEngine on
RewriteBase /foo/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /foo/hoge.cgi?hoge=$1 [L,QSA]
----------------------------------------
mod_rewriteを使って↑の設定で、
http://localhost/foo/%E3%81%B5%E3%81%8C
でアクセスすると、なぜか"ふぁEREQUEST_URI=/foo/ふが"が返ってきます。
何故そうなるのかさっぱりわからないので、原因もしくは解決策を教えてください。
環境はWindowsXPsp1 + Apache1.3.34 + ActivePerl5.8.8です。
ちなみに"%E3%81%B5%E3%81%8C"は、UTF-8の"ふが"をURIエスケープしたものです。

回答の条件
  • 1人3回まで
  • 登録:2006/04/06 11:39:27
  • 終了:2006/04/13 08:40:16

回答(2件)

id:ellica No.1

ellica回答回数8ベストアンサー獲得回数02006/04/07 02:17:55

ポイント10pt

アクセスする方法はこうじゃないですか?↓

http://localhost/foo/?%E3%81%B5%E3%81%8C

クエスチョンマークが抜けているので、想定している

hoge.cgi?hoge=%E3%81%B5%E3%81%8C

にはならず、

http://localhost/foo/ほげ

というファイルを開きにいってエラーが発生しているのだと思います。

id:nyarla-net

いえ、"http://localhost/foo/%E3%81%B5%E3%81%8C"で合ってます。

クエスチョンマークつけると何も返ってきません。

"http://localhost/foo/ふが"というファイルを開きに行っているのなら、

"404 Not Found"が返って来るはずです。

CGIから"ふが"という結果が出力されるを期待しているのに、

"ふぁEREQUEST_URI=/foo/ふが"という変数が展開されたような

結果が返ってくるので首を傾げているわけなんですが。

2006/04/07 10:47:09
id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692006/04/08 10:48:40

ポイント60pt

回答ではなく、関連情報ですが...。

ローカルでいくつか試してみましたが、rewrite がURIエスケープを展開してしまうようです。(Win環境でない為か、”ふぁ...”ではなく”ふが”でしたが。)

%E3%81%B5%E3%81%8C ではなく英数字の場合は問題無いのでエスケープを展開しないスイッチがわかれば良いのですが、わかりませんでした。

id:nyarla-net

mod_rewrite側の問題ですか……。

いろいろ試していた時、.htaccessで

"DirectoryIndex /foo/hoge.cgi?hoge=ふが"

としても同じ現象がおきたので、Apacheが

原因のような気もします。

少なくとも問題の範囲が縮められたので感謝です。:)

2006/04/08 14:31:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません