UTF-8の.htaccessによりエラーが発生する場合

.htaccessで500のエラー(Internal Server Error)が発生するのはよくあることですが、大抵は、どこか記述に間違いがある場合です。エラーログを見ると、ある程度、原因がわかりますが、エラーログを見ることができないと、よく見直すか、推測するしかありません。(さっさと要点を見たい場合はこちら。)

それで、最近ややこしい事例が発生しました。最近、サーバー関係のソフトウェアがバージョンアップしたり、互換ソフトへの乗り換えなどで、今まで動いていた.htaccessが動作せず、500を出してしまうことが多くなりました。

これ、最悪ですね。

まあ、私が運営しているサイトは、だいたい個人サイトばかりなので経済的な被害というものはありませんが、それでもせっかく来た常連さんたちが心配するし、中には、サイトが閉鎖になったと思う人がいるかもしれません。

さて、エラーログには、記述の誤りやスペリングの間違いを示唆するようなことが書かれているのですが、実際に.htaccessを見ると、どこも間違っていなかったりします。

実は、byte order markerが付いていたのです。これが付いていると、ウェブサーバーでは使えなかったりします。

このbyte order markerなるものは、UTF-8など、UTFなんとかの文字コードで作られたファイルの先頭に付いている文字コードに関する目印です。ほんの数バイトのデータです。

別名、BOMとも言います。「BOM付き」とか「BOM無し」とか言っている、あれですね。

つまり、ウェブサーバーにアップロードする.htaccessはbyte order markerなし、つまりBOM無しである必要があるということです。

テキスト・エディターでUTF-8により保存する際には、必ずBOM無しを選んで保存しなくてはいけません。Shift_JISで保存する場合は、そういうのは関係ないのでいいのですが、海外サーバーではShift_JISが使えなくなっている場合が出てきたので、要注意です。

Shift_JISの.htaccessで500が出るようになったので、UTF-8で保存したものの、BOMを付けてしまったので、500が出たままで、改善せずという事態になってしまいがちです。私の場合ですが・・・。

方策としては、以下のどれかです。

1)UTF-8で保存する際にBOM無しを指定する。

2)サーバー会社のサポートに頼んで、Shift_JISの.htaccessが動作するようにしてもらう。

日本のサーバー会社では、当面、こういう問題は出ないかもしれませんが、いつ状況が変わるかわかりませんので、覚えておくといいと思います。

このUTFのBOMのことを、別名、「Unicode signature」とも言います。テキスト・エディターによっては、そちらの名称を使っているものもあります。私が使っているOeditでは、「no signature」というのが、「byte order markerなし」に相当します。

要点

UTF-8の.htaccessで500のエラーが出たら・・・

1) BOMなし(byte order markerなし)で保存し直す。

2) Shift_JISで保存して、サーバー会社にShift_JISの.htaccessへの対応を要請する。

Oeditなどの一部のテキスト・エディターでは「BOMなし」は「no signature」と表記されている。

ちなみに、Windows付属のメモ帳でUTF-8による保存を行うと、必ず、BOM付きとなるので、使ってはいけません。