主に Apache の WebDAV 拡張に関する各種ソフトウェア、パッチ、ドキュメントの公開と継続的なメンテナンスを行います。cadaver や davfs 等、Apache Software License 以外のライセンスを持つものが含まれる事に注意して下さい。
mod_rewrite で mod_encoding のようにリクエスト URI の文字コード変換が
出来ないかと色々弄ってみたところ、結構いい感じに出来上がりました。まだ
少し研ききれていない部分があるかも知れません。皆さんにお試し頂いてレポー
ト頂ければ幸いです。
なお、mod_rewrite における文字コード変換は、mod_encoding の作者でもあ
ります IIJ 山田さんのアイデアを元にしています。mod_rewrite 自体は若干
難解なモジュールですが、実装を終えてみるとこのアイデアは的を射ていたと
思います。アイデアを拝借させて頂いた事について、この場をお借りして山田
さんに感謝申し上げます。
---
●インストール方法
httpd-2.0.54 に添付のパッチを当ててコンパイル&インストールして下さい。
但し、このパッチは下記の前提があります。前提から外れる場合は、適当に
hackして下さい。
・OS に実用的な iconv() がある事
・リンク時に -liconv が不要な環境
●設定方法
mod_rewrite のディレクティブを若干拡張してあります。
・RewriteCharset ディレクティブ新設
変換先文字コードを指定するディレクティブです。サーバ単位/ディレクト
リ単位の両方で使用できる筈です(ディレクトリ単位でしか試していません (^^;。
例:RewriteCharset UTF-8
・RewriteRule ディレクティブの拡張
変換元の文字コードを指定する為のフラグ charset (CH) を追加しました。
文字コードは":"で区切りながら複数指定する事が出来、前の方から順に変
換元として(RewriteCharset で指定した変換先文字コードへの)変換を変
換を試みます。
例:RewriteRule ^(.+[^/])$ $1 [L,CH=EUCJP-OPEN:UTF-8]
手を入れたのはこれだけです。後は、「黒魔術」と言われる mod_rewrite
の小技を駆使すれば、従来のmod_encoding と同様、アクセスしたブラウザ
のタイプに応じて任意の文字コード変換が指定出来る筈です。例えば、
mod_encoding の下記設定を考えてみると、
---
EncodingEngine on
SetServerEncoding UTF-8
DefaultClientEncoding UTF-8 CP932 EUC-JP
AddClientEncoding "Microsoft .* DAV 1.1" ASCII CP932 UTF-8
AddClientEncoding "Microsoft .* DAV" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV $)" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV 1.1)" CP932 UTF-8
AddClientEncoding "Microsoft-WebDAV*" UTF-8 CP932
AddClientEncoding "RMA/*" CP932
AddClientEncoding "xdwin9x/" CP932
AddClientEncoding "cadaver/" EUC-JP
AddClientEncoding "Mozilla/" EUC-JP
---
本パッチではこうなるかと思います(手元に大したクライアント環境がない
のでここまで複雑なのは試していませんが)。
---
RewriteEngine on
RewriteCharset UTF-8
RewriteCond %{HTTP_USER_AGENT} ".*Microsoft .* DAV 1.1.*" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*(Microsoft .* DAV 1.1).*"
RewriteRule ^(.+[^/])$ $1 [L,CH=ASCII:CP932:UTF-8]
RewriteCond %{HTTP_USER_AGENT} ".*Microsoft .* DAV.*" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*(Microsoft .* DAV $).*" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*Microsoft-WebDAV.*"
RewriteRule ^(.+[^/])$ $1 [L,CH=UTF-8:CP932]
RewriteCond %{HTTP_USER_AGENT} ".*RMA/*.*" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*xdwin9x/.*"
RewriteRule ^(.+[^/])$ $1 [L,CH=CP932]
RewriteCond %{HTTP_USER_AGENT} ".*cadaver/.*" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*Mozilla/.*"
RewriteRule ^(.+[^/])$ $1 [L,CH=EUC-JP]
---
実際に試した設定(の該当部分)を下記に挙げておきます。
---
RewriteLog "/usr/local/apache2/logs/rewrite.log"
#RewriteLogLevel 9
<Directory "/usr/local/apache2/htdocs/utf-8">
RewriteEngine on
RewriteBase /utf-8/
RewriteCharset UTF-8
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^(.+[^/])$ $1 [L,CH=UTF-8:SHIFT-JIS:EUCJP-OPEN]
</Directory>
<Directory "/usr/local/apache2/htdocs/shift-jis">
RewriteEngine on
RewriteBase /shift-jis/
RewriteCharset SHIFT-JIS
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^(.+[^/])$ $1 [L,CH=EUC-JP:EUCJP-OPEN:UTF-8]
</Directory>
本パッケージ最初のリリースです。