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>