1. 症状
以下、.htaccess内の記述です。
Redirect 301 /hoge/ /fuga/
Redirect 301 /hoge/aaa.html /fuga/aaa.html
Redirect 301 /hoge/bbb/ccc.html /fuga/bbb.ccc.html
これらがすべてリダイレクトされず、
ブラウザ上は左側のURLが表示されたまま、
ドメイン直下に配置されたhoge.htmlの内容を表示する。
ステータスコードを調べると、
301リダイレクトは発生せず、いきなり200を返している。
こんな謎な現象が起きていました。
2. この症状を引き起こしているさくらサーバーの独自仕様
いろいろ実験した結果、
ドメイン直下に、hoge.htmlという名前のHTMLファイルが置いてあると、
(※hogeは任意の文字列です)
.htaccessの内容は無視して、hoge/で始まるURLに対して、問答無用でhoge.htmlの内容を返す。
(しかもステータスコードは200)
という挙動をしていました。
このブログもさくらサーバーなので試してみたんですが、全く同じ挙動をしているので、さくらサーバー独自の仕様だと思われます。
3. 対策:ありのままを受け入れ、素直にファイル名をずらそう。
そのため、ドメイン直下に/hoge/とhoge.htmlのように、同名のディレクトリとファイルが存在するサイト構成にしてしまうと、リダイレクトの時に予期しない挙動をする場合があります。この挙動はさくらサーバー利用者にはどうにもならないと思われますので、素直に名前をずらすことをオススメします。