Namazu-win32-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Netscape + Apache 日本語で検索できない?
竹迫です。
> 大体そうです。Apache にするだけでは Namazu の検索は問題
> ありませんが、検索結果上からパスに日本語を含む名前のファイルを
> 表示できなくなりました。
>
> そこで WebDAV の日本語ファイル名問題を解決するために使われていると
> いう、mod_encoding.so というモジュールを導入することで、日本語URL
> の件は落着しましたが、今度は Namazu で日本語検索が出来なくなりました。
これは、mod_encoding の副作用の問題ですね。
私も namazu.cgi ではありませんが、mod_perl + mod_dav + mod_encoding の
組み合わせで開発をしていたときに、似たような状況に遭遇しました。
mod_encoding の設定で、EncodingEngine on とすると、HTTPリクエストヘッダ中に
現れるすべての文字列をURIアンエスケープして、さらに文字コードをサーバ側の
エンコーディングに変換してしまうといった副作用があります。mod_encoding の
ソースコードを読む限り、これは仕様のようです。
このため、GETメソッドで送られてくる ? 以降の文字列も、文字コード変換の
対象となってしまい、今回のような現象になってしまいます。
CGI から環境変数 QUERY_STRING を表示してみるとわかると思います。
この現象を回避するには、現状の httpd.conf を
<IfModule mod_encoding.c>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
</IfModule>
↓ 以下のように書き換えて、
<IfModule mod_encoding.c>
<Location /DAV>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
</Location>
</IfModule>
EncodingEngine を On にするディレクトリに制限をかければ
(この例では /DAV 以下のみ) 大丈夫なはずです。
逆に、namazu の動いている /cgi-bin 以下で EncodingEngine が Off に
なっていれば良いので、、、
<IfModule mod_encoding.c>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
<Location /cgi-bin>
EncodingEngine Off
</Location>
</IfModule>
という書き方も可能かと思います。(動作確認はしていませんが・・・)
> IIS 使用時は特別なことを何もしなくても、どのブラウザでも問題なく
> 検索できていましたし、日本語名のファイルも問題なく表示できていました。
>> Apacheに入れ替えたら、何が問題となったのでしょうか。そして、それ
>> はIISの時にはどうだったのでしょうか。
IIS の場合は、URI パス中に含まれる UTF-8 の文字列をサーバ上の
ファイルシステム上のエンコーディングに自動マッピングして
ファイルの参照を行なう仕組みになっているので、このような
問題は発生しません。環境変数 QUERY_STRING は、文字コード
変換の対象外なので、そのままということです。
Apache の mod_encoding は、HTTPリクエストヘッダ全体を
文字コード変換する仕組みなので、問題が発生していたのです。
POSTメソッドで渡ってくる部分はHTTPリクエストヘッダ外なので、
文字コード変換の対象外となり、そのままの値で参照可能なのですが、
今のところ namazu.cgi は、GETメソッドでしか動作しません。
--
株式会社ドリーム・アーツ 製品企画開発本部
竹迫 良範 <takesako@xxxxxxxxxx>