Namazu-win32-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Netscape + Apache 日本語で検索できない?
竹迫です。
>> やってみましたが、だめでした。
>(中略)
>> <IfModule mod_encoding.c>
>> <Location /documents>
>> EncodingEngine On
>> SetServerEncoding UTF-8
>> AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
>> </Location>
>> </IfModule>
>
> Location を LocationMatch に変更したり、/document を / のみに
> 変更してみたりしましたが、どれも同じでした。
> (日本語を含む URL が shift_jis のままなので、日本語名ファイルを
> 表示できないが、検索はできます)
やはり駄目でしたか・・・。
いろいろとお手数をお掛けしてすみません。
Location や Directory で囲ってしまうと、EncodingEngine の On/Off の
切り替えができないみたいですね。ソースを見てみると、mod_encoding の
hook のかけ方のタイミングに問題がありそうです・・・。
ということで、mod_encoding.c のパッチを作ってみました。
--------------------------------------------------------------------------
* mod_encoding-20020611a-safequery.patch
--------------------------------------------------------------------------
diff -urN mod_encoding-20020611a-orig/mod_encoding.c mod_encoding-20020611a/mod_encoding.c
--- mod_encoding-20020611a-orig/mod_encoding.c Tue Jun 11 18:07:14 2002
+++ mod_encoding-20020611a/mod_encoding.c Fri Dec 13 11:43:46 2002
@@ -129,13 +129,21 @@
char *buff;
char *keys[] = { "Destination", NULL };
int i;
+ char *unparsed_uri;
+ char *query_string;
/* Normalize encoding in HTTP request line */
- ap_unescape_url(r->unparsed_uri);
- if ((buff = iconv_string(r, cd, r->unparsed_uri,
- strlen(r->unparsed_uri))) == NULL)
+ query_string = ap_pstrdup(r->pool, r->unparsed_uri);
+ unparsed_uri = ap_getword(r->pool, &query_string, '?');
+ ap_unescape_url(unparsed_uri);
+ if ((buff = iconv_string(r, cd, unparsed_uri,
+ strlen(unparsed_uri))) == NULL)
return -1;
- ap_parse_uri(r, buff);
+ if (query_string && strlen(query_string) > 0) {
+ ap_parse_uri(r, ap_pstrcat(r->pool, buff, "?", query_string, NULL));
+ } else {
+ ap_parse_uri(r, buff);
+ }
ap_getparents(r->uri); /* normalize given path for security */
/* Normalize encoding in HTTP request header(s) */
--------------------------------------------------------------------------
上記パッチをあてて、mod_encoding.so をコンパイルし直してみてください。
リクエストURI中の ? 以降の QUERY_STRING の文字コード変換はせずに、
そのまま保存します。これで、IIS に近い動きになると思います。
以下のように、設定ファイルの Location を外してみてください。
<IfModule mod_encoding.c>
EncodingEngine On
SetServerEncoding UTF-8
AddClientEncoding "Mozilla/5" JA-AUTO-SJIS-MS
</IfModule>
とりあえず、手元の以下の環境で動作確認を行ないました。
OS: Miracle Linux V2.0
Apache 1.3.26 / DAV 1.0.3 / mod_perl 1.26 / mod_encoding-20020611a
# Windows / Apache 2.0.x の環境での確認は、まだできていません。
--
株式会社ドリーム・アーツ 製品企画開発本部
竹迫 良範 <takesako@xxxxxxxxxx>