WEBサイトで拡張子なしのURLでもアクセスできるようにする

今回、サイトのリニューアルに伴い、各ページのURLを拡張子無しに統一しようと思いました。

最近は、WordPressの普及で、拡張子なしのURLもよく見かけるようになってきましたし、後々拡張子が変わっても手間がかからないから・・・程度の軽い気持ちでやってみたのですが、レンタルサーバーによって仕様も異なり、意外に面倒でした。

今回実現したいのは、ブラウザのURL表示欄に拡張子なしのURLを表示させたいということです。

レンタルサーバーは、ロリポップとさくらインターネットで、両方で試してみました。

ロリポップの場合

ロリポップの場合は、何の手間もかかりませんでした。

ナビゲーションなどのサイト内ページへのリンク箇所のaタグに、単に拡張子なしのURLを記述するだけです。

これで、サイトを表示させ、下層ページへのリンクをクリックすれば、ブラウザのURL表示欄には拡張子なしのURLが表示されます。

そのURLに「.html」または「.php」と拡張子を付けたURLでもアクセスしても問題なく表示されます。

つまり、拡張子を付けても付けなくても両方のURLで同一ページにアクセスできます。

ただ、実際にサーバーにあるのはhtmlファイルなのに、それを拡張子なしにして「.php」を付けてもアクセスできません。

サーバー上にphpファイルは無いからです。

今回試したのは、htmlファイルとphpファイルだけですが、ロリポップの場合、以下のようになりました。

htmlファイルの場合・・・拡張子を付けても付けなくてもアクセスできる
phpファイルの場合・・・拡張子を付けても付けなくてもアクセスできる

しかし、さくらインターネットの場合は、こうはいきませんでした。

さくらインターネットの場合

さくらの場合は、上記の手順でやってみたところ、以下のようになりました。

htmlファイルの場合・・・拡張子を付けても付けなくてもアクセスできる
phpファイルの場合・・・拡張子を付けた場合はアクセスできるが、拡張子を付けなかった場合は404エラーでアクセスできない

いろいろ調べてみたところ、さくらでは以前であればphpの拡張子なしでもアクセスできたようですが、最近サーバーの仕様が変更になったようで、phpファイルの場合、拡張子なしだとアクセスできないようになったようです。

対処法としては、MIMEタイプのtext/htmlにphpを追加することでアクセスできるようになるとのことだったので、早速、.htaccessに以下一文を記述し、ルートディレクトリに設置しました。

AddType text/html .php

これで再度確認してみたところ、今度はPHPファイルでも拡張子があってもなくても表示されるようになりました。

以上の作業の中で、サイト内リンクのURL記述の際に、拡張子なしと決めれば、サイト内のすべてのURLを拡張子なしで統一しておくことが重要です。

検索エンジンは、拡張子有りと無しを別々のページとみなします。

サイト内にどこか一箇所でも拡張子有りのURLの記述があれば、拡張子有りのURLもインデックスしてしまい、重複コンテンツとみなされかねません。

もし両方インデックスされてしまった場合は、canonicalタグで正規化を行う必要があるでしょう。

追記

上述しました拡張子無しで運営してきたサイトも、その後、SSL化をすることとなりました。

その際、httpからhttpsへ.htaccessでリダイレクトを行った際、リダイレクト先のURLが、拡張子付きのURLとなってしまうという状況になりました。

なので、PHPコードによるページごとのリダイレクトを行い対処を行いましたので、拡張子無しでSSL化によるリダイレクト行う際は、併せて参照ください。

【SSL化】拡張子無しのページをPHPコードでhttpsへリダイレクト