人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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エスケープしたものです。

●質問者: にゃるら
●カテゴリ:インターネット ウェブ制作
✍キーワード:.htaccess CGI E3 hoge mod_rewrite
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ellica
●10ポイント

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

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

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

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

にはならず、

http://localhost/foo/ほげ

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

◎質問者からの返答

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

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

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

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

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

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

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


2 ● tezcello
●60ポイント

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

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

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

◎質問者からの返答

mod_rewrite側の問題ですか……。

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ