Apacheと日本語ファイル名と%
Apacheで日本語のファイル名を取り扱うにはmod_encodingを入れればよい。mod_encodingはOSネイティブなエンコーディングでファイル名を送ってくるWebDAVクライアント用に作成されたモジュールだが副作用として日本語を含むURLを適切に処理できるようにしてくれたりする。
設定方法としては、httpd.confとかに
<IfModule mod_encoding.c>
EncodingEngine on
SetServerEncoding SJIS
ClientEncodingの設定
</IfModule>
と書けばよい。こうするとWebDAVに害が出そうな気がするのだが見た感じ問題ないようだ。
一方、mod_encodingを入れるとCGIパラメータとかも変換してしまうのでいろいろ害があるらしい。それへの対策パッチは提供されている。Apache1.3のパッチとApache2のパッチ
別の問題として%を含むファイル名をうまく取り扱えないという問題もあるらしい。それも解決するパッチが提供されている。このパッチは上記のApache1.3パッチへの追加パッチ
Debianのlibapache-mod-encodingとlibapache2-mod-encodingではQUERY_STRINGパッチは適用されているが%を含むファイル名パッチが適用されていない。libapache-mod-encodingとlibapache2-mod-encodingに%を含むファイル名対応パッチを適用したDebianパッケージを以下の場所に置く。
sarge
deb http://www.dzeta.jp/~junjis/apt/sarge/ ./
sid
deb http://www.dzeta.jp/~junjis/apt/sid/ ./
各ファイルシステムで日本語のファイル名がどのエンコードで格納されているかを調べてみる。結果
| Windowsローカル | Shift-JIS |
| Macローカル | UTF-8 |
| Windows共有(Windows) | Shift-JIS |
| Windows共有(Samba) | UTF-8(デフォルト) |
| WindowsからSCPで転送 | Shift-JIS |
| WebDAV | UTF-8 |
ブラウザで日本語URLをアクセスした結果
| ファイル名が | Shift_JIS | UTF-8 |
| Firefox(Win) | mod_encodingなしだとアクセス可 | mod_encodingがあるとアクセス可 |
| IE(Win, URLをUTF-8で送信) | mod_encodingのあるなしに関わらず不可 | mod_encodingのあるなしに関わらず可 |
| IE(Win, URLをShift_JISで送信) | mod_encodingがないとアクセス可 | mod_encodingがあるとアクセス可 |
| Safari(Mac) | mod_encodingのあるなしに関わらず不可 | mod_encodingのあるなしに関わらず可 |
結論、ファイル名はUTF-8エンコーディングにしておけ
#真の結論、日本語のファイル名を使うな
Keyword(s):
References:[FrontPage]