この問題は、よく言われる 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/
|