サーバーにHTMLファイルをアップしてアクセスする時、URLの最後に.htmlの拡張子を付けたファイル名を指定することと思います。
http://abc.com/123.html みたいな感じですね。
index.htmlなどは省略できることが多いですが、それ以外のファイルの場合、URLの最後にファイル名を拡張子付きで指定します。それを当たり前だと思っていました。
しかし、レンタルサーバーのさくらインターネットは、アップロードしたHTMLファイルに対して、.htmlの拡張子がなくても表示できるみたいなんです。独自の仕様なのか分かりませんが。。。
HTMLファイルをアップロードしてみる
URL中のhtml拡張子があっても無くても、両方とも同じ表示になります。
アップロードしているのは、「test2.html」というHTMLファイル、1つだけです。
なぜか拡張子なしのURLも同じように表示されてしまいます。
拡張子のないファイルをアップロードしてみる
次にローカルで拡張子のない「test」という名前のファイルをテキストエディタで保存し、先のURLと同じさくらサーバーにアップしました。
表示はこんな感じ。
さくらサーバーは、拡張子のないファイルをアップロードすると、ファイル中に記述されたテキストだけが表示されるようです。
このURLに.htmlを付けてアクセスしてみると、404のエラーが返ってくるんですね。
これ、普通ですよね。ファイルがないんですから。
拡張子なしのURLから.htmlありのURLに転送してみる
HTMLの拡張子があってもなくても、同じページが表示されるということは、なにかの間違いで、両方のURLが検索エンジンにインデックスされる可能性があるかもしれません。
仮に拡張子なしのURLから、拡張子ありのURLに転送するとします。
HTMLファイルをアップロードした時のURLを例にすると、.htaccessに下記のように記述すれば転送できます。本来なら。。。
Redirect permanent /test2 http://mega004.sakura.ne.jp/test2.html
ただ、さくらサーバーの場合、.htaccessの記述だけで転送できません。
実際に転送する場合は、「test2」という拡張子なしのファイルを実際にアップロードしておかないと転送されません。
ファイルの実体があるかないかがポイントのようです。
前述の例のようにHTMLファイルの場合、拡張子ありなしでも表示する仕様を優先するみたいですね。