この問題は、よく言われる DefaultCharset の問題とは異なり、WebDAV の日本語対策として
mod_encoding を導入したときの弊害として発生する有名な問題である。SquirellMail
の日本語フォルダが文字化けしたり、CGI の GET Method で取得した文字 ( Namazu
の検索入力やおやじが使用している KENT さんの BBS の検索等)が化けてしまったりする問題。
おやじの経験では、デストリによって発生頻度が異なる(SuSEではあらゆる場面で不具合が発生するが、RedHatではCGI系は問題は顕在
化しなかった。)が、Web_DAVの日本語対策としてmod_encodingを導入しているなら、一度、停止してみて本問題かどうか調査すると良い。
[原 因]
本件は、mod_encoding のhook のかけ方のタイミングに問題があるらしいとのこと。 本件は結構有名な話で、おやじのLocationでの対処も以前話題になった話であるが、なぜいつまでも本家で修正が出ないのかな〜?
[対 策]
上記では、Apache2.x系については言及されていないが、参考にしてパッチで対処した。実際には、APIの違いから
Apache2.0系と2.2系ではパッチが異なる。mod_encoding をインストールする一連の作業を以下にまとめて置くので参考にしてほしい。全体作業の流れと設定等は、本編を参考にしてほしい。
  - 事前準備
 
 
  mod_encoding は、 WebDAV 
Resources JP の Download からダウンロードできるが、Apache2.0 用はApache1.3 用の mod_encoding.c
  の差し替えファイルの形で提供されているので、以下の2つのファイルを同じディレクトリにダウンロードする。
  
   
- mod_encoding-20021209.tar.gz 
- mod_encoding.c.apache2.20040616版
 
 
 ダウンロードしたmod_encoding-20021209.tar.gz を展開して mod_encoding.c.apache2.20040616版
  を mod_encoding.c として差し替える。
 
 
 
 
  
| # wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz# wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
 # tar zxfv mod_encoding-20021209.tar.gz
 # cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c
 |  
 
 
- iconv_hookのインストール
 
 mod_encoding のインストール前に iconv_hook ライブラリのコンパイルとインストールを行う。
 
 
 
| # cd mod_encoding-20021209/lib# ./configure
 # 
make
 # make install
 # ldconfig
 |  
 
 これで、iconv_hook ライブラリが /usr/local/lib 配下にインストールされるが、そのままでは
  iconv_hook ライブラリを認識できないので、最後にldconfig でリフレッシュしておく。
 
 なお、RedHat 系では ld.so.conf (共有ライブラリの場所を書いたファイル)に
  /usr/local/lib へのリンクが張れていないので、ldconfig は下記のようにld.so.conf
  に /usr/local/lib を追記してから行うこと。
 
 
 
| # vi /etc/ld.so.conf
 /usr/local/lib
 
 [Esc]、[:]、[w]、[q]で保存。
 
 # ldconfig
 |  
 
 
  - mod_encodingのインストール
 
 パッチをダウンロードしてあてた後、インストールしていくが make 時に warning
  がたくさんでる。エラーでなければ下記のとおり進めて大丈夫である。 
  Apache2.0系と2.2系ではAPIの違いからパッチが異なるので、使いわける必要がある。
  
   
    
      
        | Apahe系列 | パッチ名称 |  
        | Apache2.0系 | mod_encoding.c-apache2.0-20060520.patch |  
        | Apache2.2系 | mod_encoding.c-apache2.2-20060520.patch |  
 
なお、configure 時に指定する apxs は、httpd-devel をインストールしないと存在しないので、インストールしていなかったら追加インストールする。 このとき、依存関係でいろいろな devel パッケージを要求されるので一緒に入れる。
 
 また、apxs のインストール場所と名前、および mod_encoding.so のインストール場所がデストリによって違うので、下表を参考に作業すること。
 
 
 
    
      
        | デストリ. | 場 所 (名 称) |  
        | apxs | mod_encoding.so |  
        | SuSE系 | /usr/sbin/apxs2-prefork | /usr/lib/apache2-prefork/ |  
        | Fedora Core/CentOS系 | /usr/sbin/apxs | /usr/lib/httpd/modules/ |  
        | Souce | /usr/local/apache2/bin/apxs | /usr/local/apache2/modules/ |  
 
 下記は、SuSEでApache2.0系の例である。mod_encoding-20021209のディレクトリに戻り、パッチをあててからインストールを行う。
 
 
 
    
      
        | # cd ../# wget http://www.aconus.com/~oyaji/faq/mod_encoding.c-apache2.0-20060520.patch
 # patch -p0 < mod_encoding.c-apache2.0-20060520.patch
 # ./configure --with-apxs=/usr/sbin/apxs2-prefork \
 --with-iconv-hook=/usr/local/include
 # make
 # gcc -shared -o 
mod_encoding.so mod_encoding.o \
 -Wc,-Wall -L/usr/local/lib -Llib 
-liconv_hook
 # cp mod_encoding.so /usr/lib/apache2-prefork/
 |