2002 年 4 月 22 日 (月) 自宅

このサーバの OS を FreeBSD 4.4-RELEASE-p9 から、 4.4-RELEASE-p11 に更新したついでに、HTTP サーバソフトを、 Apache 1.3.24 から Apache 2.0.35 に更新しました。 まあ、 いずれ今後職場のサーバも Apache 1.3 ベースから Apache 2.0 ベースに移行すると思われるので、 このサーバで経験を積んでおくのもよかろう、ということで、 思いきって一気に何も考えずに更新しました (このタイミングに当たった人、ごめんなさい)。 結果…、はまった (^^;。

(まあ、このサーバの管理の経験は、 後々いろいろ職場で役に立ったりしているんですよね…)

もっともビビッたのは、 charset 情報を HTTP レベルで入れることが必須になっている点です。 このサイト、iso-8859-1, euc-jp, iso-2022-jp, shift_jis のコーディングのファイルが、いろいろな場所に散らばっているため、 参った参った。

とりあえず、.htaccess で次のように指定して、 手動でディレクトリ単位でコードを指定しました。 これが正しい対処かどうかは分からないですが、 とりあえずこれで対処しました (1997 年の日記が iso-2022-jp で記述されていたので、 これは残りと同じ euc-jp に統一しました)。

AddType "text/html; charset=euc-jp" .html

どうなんでしょう? MultiViews 辺りで対処するのが正しいのか、 システムワイドのデフォルトで対処するのが正しいのか、 httpd.conf の AddCharset で次みたいにして、 ファイル名の方を変えるのが正しいのか… (これって、 私の趣味サイト程度ならどうでもいいんだけど、 結構職場で Windows 系とかを考えると大変なんだけどな〜、 あ、WebDAV 使ったりするとどうなるのかな?)。

AddCharset EUC-JP      .euc-jp

次にはまったのは CGI。 CGI は、httpd.conf の、

AddHandler cgi-script .cgi

で指定するんだけど、 charset に関しては、CGI スクリプト自体が出力する HTTP ヘッダで、

    print <<EOF;
Content-type: text/html; charset=euc-jp

EOF

みたいに出力しない限り、 Apache2 は iso-8859-1 を仮定してくれるみたいです。 単に Content-Type: text/html だけ描いておくと、 Apache2 は勝手に charset=ISO-8859-1 を補ってくれるのです。 こんな感じにね。

% telnet fromto.cc 80
Trying 203.141.151.140...
Connected to fromto.cc.
Escape character is '^]'.
GET /hosokawa/diary/search/namazu.cgi HTTP/1.0

HTTP/1.1 200 OK
Date: Mon, 22 Apr 2002 18:02:19 GMT
Server: Apache/2.0.35 (Unix) DAV/2
Connection: close
Content-Type: text/html; charset=ISO-8859-1

まあ、Perl のスクリプトだったら、単にヘッダ出力部を書き換えるだけですむけど、 問題は C で書いてあるスクリプトです。

たとえば namazu2 は、ports でソースを展開→FreeBSD パッチの適用の後、 手動で Content-Type を吐き出すところを全て、 charset=euc-jp 付きで出力するようにパッチを当ててコンパイルしました。 この結果、文字化けはなくなりましたが、 このパッチを ports/database/namazu2 に commit していいかというと、 そんなはずもありません。 本質的解決は namazu2 の Apache2 対応リリースを待つ他ないのかな? それとも私のやり方が大間違い?

それはともかく、Apache2 では、 mod_ssl も mod_dav も最初から Apache 標準になっていてびっくり。 他にも面白そうな機能がいろいろあるから、 試してみようかな。


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。