OS X Apache URLにマルチバイト文字を使えるようにする – mod_encoding

By | 2016年4月29日

このサイトではすでに URL にマルチバイト文字が使えるようになっているが、検証用 Local の Mac OS X 10.10 では URL にマルチバイトを指定できない。文字化けして URL 先に飛ばない。

Mac OS X Server 10.6 まではあった mod_encoding モジュールを Apache に導入しないとだめらしい。

mod_encoding をソースから Build しようと色々試したが、Linux 向けの記事が大半で、ビルドできず結局あきらめた。となると、最近オクで安価になってきている、Mac OS X Server 10.6 を狙って試してみるのもいいではないかと、ヤフオクで 4,000 円ほどでぽちり。ただ Mac Mini 同梱のメディアというのが気にはなった。

不安は的中し、VMWare Fusion のゲスト OS として install しようとするも

「お使いのコンピュータに OS X をインストールできませんでした」

とはじかれてしまう。そこで、DVD 中のパッケージファイルからモジュールを取り出すことに方針転換。

Mac OS Xのパッケージファイルを操作するを参考にパッケージファイルからモジュールを取り出した。ちなみにモジュール mod_encoding が含まれているパッケージはこちら。

/Volumes/Mac\ OS\ X\ Server\ Install\ Disc/System/Installation/Packages/ServerEssentials.pkg

ところが、OS X 10.10 では httpd.conf で mod_encoding を有効にしても、httpd 自体が apachectl start で起動しない。error もなしにただ起動しない。

$ sudo /usr/sbin/httpd-wrapper -D FOREGROUND

で Apache を起動しようとするとこんなエラーが出る。

httpd: Syntax error on line 66 of /private/etc/apache2/httpd.conf: API module structure ‘encoding_module’ in file /usr/libexec/apache2/mod_encoding.so is garbled – expected signature 41503234 but saw 41503232 – perhaps this is not an Apache module DSO, or was compiled for a different Apache version?

おそらくバージョン不整合(mod_encodingが古い)の問題と判断して、Brew で Apache 2.2 をインストールした。

$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php
$ brew install httpd22

ところが今度は標準の /usr/libexec/apace2 にある php のモジュール libphp5.so と相性がだめだ(Apache がエラーを吐いて起動できない)。

$ sudo apachectl start
httpd: Syntax error on line 62 of /usr/local/etc/apache2/2.2/httpd.conf: Cannot load /usr/libexec/apache2/libphp5.so into server: dlopen(/usr/libexec/apache2/libphp5.so, 10): Symbol not found: _ap_unixd_config\n Referenced from: /usr/libexec/apache2/libphp5.so\n Expected in: /usr/local/Cellar/httpd22/2.2.31/bin/httpd\n in /usr/libexec/apache2/libphp5.so

共有ライブラリのことはとんと分からないので精査せず、またしてもダウングレード作戦で、標準の php5.5 を brew の 5.4 にダウングレード。

$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php
$ brew install php54 –homebrew-apxs

/usr/local/etc/apache2/2.2/httpd.conf の追加・変更内容

LoadModule encoding_module /usr/libexec/apache2/mod_encoding.so
<ifModule mod_encoding.c>
EncodingEngine on
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding UTF-8 “Mozilla .* Linux”
</IfModule>
#LoadModule php5_module libexec/apache2/libphp5.so
LoadModule php5_module /usr/local/Cellar/php54/5.4.45_3/libexec/apache2/libphp5.so

これでめでたく OS X ローカル環境でも、アップロード先の wordpress と同じ挙動で動くようになった。

時間があれば、 –homebrew-apxs を指定した brew php5.5 or 5.6 で試してみたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この記事のトラックバック用URL