.htsccessで正規化をしたときの見落としがちなポイント


記事を書こうと思ったわけ

ボランティアでお手伝いしている、あるクライアント様のウェブサイト管理。古き良きHTMLで記述されていて、メンテに手間がかっていました。全てHTMLファイルになっているから、別パーツをインクルードするとかなかなかできないわけです。CMSで管理されているわけでもない。

なので、共通要素(たとえばグローバルナビゲーション)に変更を加える場合、全てのページの要素を更新しなきゃなりません。そして、これは往々にして、人為的なミスにつながることが多いです。
もっぱらPHPでサイトを作っていた僕としては、どうにかならんかと思っていて、ゆくゆくはPHPで管理できるようにしたいと考えていました。

その場合、拡張子は.phpとなります。すると、これまで.htmlでアクセスされていたURLを変更する必要が出てきてしまいます。そこで、これをコントロールする.htaccessで制御しなきゃならないなと思うに至りました。

ところが、原理はわかっていても、いざサーバーにhtaccessを上げてみると、Internal Server Error500が発生してしまいました。
どういうわけか全然わからず、これまで失敗続きだったわけですが、このたび、見事にそれをクリアしました。
ググれば、正規化の記述のしかたはたくさんありますが、あまり言及されてないポイントで引っかかったので、メモとして残します。

.htaccessで見逃しそうなポイント

文字コードはUTM-8(BOM無し)

.htaccessはテキストエディタで書くことが多いと思うので、そこでは必ずUTM-8を文字コードに指定しておく。このとき、BOM無しにしておくことが重要です。そうでないと、サーバーエラーが起こります。

改行コードはLF

これも盲点でした。UNIX系の改行コードはLFを使うので、それに合わせて改行コードをLFにしておきます。

最終行は空行にしておく

これをやっていなかったせいでサーバーエラーが生じていました。
最低1行は挿入しておくこと。
6行目と7行目に注目。空行が入っている。ただし、空白スペースは入れるとエラーになります。

サーバーアップロード方式はアスキーモードで

モードを自動変換してアップしてくれるFTPクライアントばかりだと思いますが、あえてマニュアルであっぷすることもありかもしれません。