QA@IT

Apache2でContent-Typeのcharsetを変更したい。

13459 PV

現在、ubuntu12のapache2上で、rails3.2を使ってwebサービスを作っています。

このwebサービスにhumans.txtというファイルを置いて、そこに日本語(マルチバイト文字)を書きました。
しかし、このデータがChromeでは文字化けしてしまいます。

そこで、HTTPのResponseのヘッダーに、Content-Type: text/plain; charset=Shift-JISと書いて、明示的に文字コードをブラウザに指定したいと考えました。

そのために、httpd.confを以下の様に変更しました。

AddType "text/plain: charset=Shift_JIS" .txt #ここに追加

<VirtualHost *:80>
   ServerName lain003
   DocumentRoot /home/hogehoge
</VirtualHost>

これでサーバを再起動して、再度アクセスしましたが、結果は

Content-Type:       text/plain; charset=urf-8

でした。

ここで質問なのですが、apache2ではどのようにすればContent-Typeに特定のCharsetを指定することができますか?

ご回答いただけると、幸いです。

回答

その humans.txt は apache 直接ではなく rails 経由で返されているのではないでしょうか?
そうなのだとしたら rails 側でどうにかするものであって、apache の設定でどうにかするものではないと思われます。

そうではなく、apache が勝手に charset=utf-8 を付けているのであればどこかで AddDefaultCharset utf-8 が設定されていると思われます。
AddDefaultCharset の設定を削除するか AddDefaultCharset off してやれば charset=utf-8 は付かなくなります。

もしくは拡張子 .txt で charset=Shift_JIS を強制するのであれば AddType よりも AddCharset Shift_JIS .txt の方が良いと思います。
(humans.txt を rails が返しているのであればこの設定は効果ありません)


あと、ちょこちょこ typo のようなものがあります。

コロンではなくセミコロン : → ;

× AddType "text/plain: charset=Shift_JIS" .txt #ここに追加
○ AddType "text/plain; charset=Shift_JIS" .txt #ここに追加

urf-8 ではなく utf-8

× Content-Type:       text/plain; charset=urf-8
○ Content-Type:       text/plain; charset=utf-8
編集 履歴 (1)

返事が長い+markdownを使いたいため、こっちで返信します。
お返事ありがとうございます。

< コロンではなくセミコロン : → ;

素で間違えてました。ただ修正してもurf-8のままでした。

< urf-8 ではなく utf-8

最初はtypoかと思いましたが、なんとこの値が実際に返ってきていました。
そこで色々調べた結果、自分がテストのために.htaccessを書いた事を思い出し、修正しました。

そこで.htaccessを無効にするため(普通はデフォで無効の様ですが、virtualhostの時はデフォで有効になってる?)に、以下の様にhttp.confを修正しました。

AddType "text/plain; charset=UTF-8" .txt


<VirtualHost *:80>
   ServerName hoge
   DocumentRoot /hoge
   <Directory />
      AllowOverride None
   </Directory>
</VirtualHost>

色々、お騒がせしてすみませんでした。おかげさまで無事修正できました。ありがとうございました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。