さくらサーバーにアップしたHTMLファイルは拡張子がなくても表示できる

サーバーにHTMLファイルをアップしてアクセスする時、URLの最後に.htmlの拡張子を付けたファイル名を指定することと思います。

http://abc.com/123.html

みたいな感じですね。index.htmlなどは省略できることが多いですが、それ以外のファイルの場合、URLの最後にファイル名を拡張子付きで指定します。

それを当たり前だと思っていました。

しかし、レンタルサーバーのさくらインターネットは、アップロードしたHTMLファイルに対して、.htmlの拡張子がなくても表示できるみたいなんです。独自の仕様なのか分かりませんが。。。

HTMLファイルをアップロードしてみる

下記の2つのURLにアクセスしてみて下さい。

http://sykp.sakura.ne.jp/test2.html
http://sykp.sakura.ne.jp/test2

両方とも同じ表示になります。

f:id:makoto_endo:20190801221036p:plain

アップロードしているのは、「test2.html」というHTMLファイル、1つだけです。

なぜか拡張子なしのURLも同じように表示されてしまいます。

拡張子のないファイルをアップロードしてみる

次にローカルで拡張子のない「test」という名前のファイルをテキストエディタで保存し、先のURLと同じさくらサーバーにアップしました。

その結果が下記のリンクです。
http://sykp.sakura.ne.jp/test

アクセスしてもらうと先の「test2.html」と表示は同じ。要はHTMLで表示されます。

で、このURLに.htmlを付けてアクセスしてみます。

http://sykp.sakura.ne.jp/test.html

そうすると、404のエラーが返ってくるんですね。これ、普通ですよね。ファイルがないんですから。

拡張子なしのURLから.htmlありのURLに転送してみる

HTMLの拡張子があってもなくても、同じページが表示されるということは、なにかの間違いで、両方のURLが検索エンジンにインデックスされる可能性があるかもしれません。

仮に拡張子なしのURLから、拡張子ありのURLに転送するとします。

HTMLファイルをアップロードした時のURLを例にすると、.htaccessに下記のように記述すれば転送できます。本来なら。。。

Redirect permanent /test2 http://mega004.sakura.ne.jp/test2.html

さくらサーバーの場合、.htaccessの記述だけで転送できません

実際に転送する場合は、「test2」という拡張子なしのファイルを実際にアップロードしておかないと転送されません。

ファイルの実体があるかないかがポイントのようです。