.htaccessは、IP/ホスト単位でのアクセス許可/拒否/制限、直リンク拒否、URL転送設定、文字コード設定、MIME設定、パスワード認証などをわずか数行の記述で実現する非常に便利なファイルです。多くのレンタルサーバで.htaccessの使用が許可されており、作成/記述方法を詳しく解説するWebサイトが多数あります。
以前、Webサイトの移転絡みで.htaccessを新たに設置したところ、500 Internal Server Errorが出ていないのに、ErrorDocument 404とかRedirectPermanentとかが正常に動作しなかったことがあります。おかげでWebの移転作業が詰みかけていました。
500エラーが出力されないということは、最終行を改行していないなどの記述ミスではありませんし、パーミッションは644で、文字エンコーディングはASCIIまたはEUC-JPやUTF-8で問題はないはずでした。ところが、改行コードがMac形式のCR(キャリッジリターン)になっていました。ふと脳裏にはてなマークが浮かんだので、UNIX形式のLF(ラインフィード)に変換したところ.htaccessが正常に動作。Windows形式のCR+LFで試しても動作OKでした。
FTPソフトの転送設定を確認したところ、.htaccessのFTP転送をバイナリモードで行っていたという初歩的なミスが原因だと判明しました。アスキーモードではファイルの改行コードをサーバに合わせて変更するのに対し、バイナリモードでは改行コードの変換を行わずにファイルを転送します。このケースでは改行コードの問題で.htaccessが正常に読み込まれなかったのです。
余談ですが、テキストベースである.htaccessやHTML、PHPファイルはバイナリモードでもアスキーモードでもさしたる影響はありませんが、画像ファイルや音楽ファイルはアスキーモードで転送すると壊れてしまうので注意してください。通常はFTPソフトが自動判別してくれるのであまり意識しない部分です。ちなみに、バイナリとアスキーの違いを簡単に言えば、メモ帳で開いた際にバイナリは意味不明な文字列で、アスキーは解釈可能な文字列になる点です。
.htaccessのトラブルの話からFTPの転送モードの方向へ微妙に逸れてしまいましたねぇ…。まぁ、Web豆知識のようなモノと解釈してくださいませ。