サイトURLから.htmlや.phpなどの拡張子を非表示にする方法


Webサイトの各ページのURLの末尾にある拡張子。表示があったり表示がないWebページがあったり気になったことはあるでしょう。
Webに詳しい方は、どの言語でどのように作られているかがだいたい想像できますが、この拡張子は特に表示させる必要がないのであれば、表示させなくてもいいでしょう。

拡張子の表示をなくすことで、WebページのURLを短くスッキリさせることができます。
また、Webページがどのように作られたのかが閲覧者にわかってしまうので、気になる方は非表示にすると良いでしょう。
他、拡張子を判別して処理をするようなプログラムがないのであれば。。。

WordPressなどのCMSでは、すでに拡張子が表示されないように設定がされていることが多いですが、別でWeb制作を行う場合は設定が必要となります。
ランディングページなどで特に頻繁に更新するコンテンツがなければ、WordPressで構築する必要はないですね。WordPressではデータベースの接続や処理が走るので、表示速度を考えても別でWebページを作成していくと良いでしょう。

ここでは、サイトURLから.htmlや.phpなどの拡張子を非表示にする方法についてご紹介します。

ただ、初めにHTMLで作成したWebページから、PHPスクリプトが必要になりPHPファイルとしていく時には、拡張子が違うことで2つのページが混在しているという認識で、SEO的にはあまりよろしくありません。
コンテンツが混在する件については後述します。

初めから拡張子が非表示で運用していけば、後に拡張子が変更になっても同じURLになるので、変更後の問題は発生しません。
拡張子を表示するか非表示にするかは、非表示にする方がメリットはあるでしょう。


拡張子を非表示にする


WebサイトのURLの拡張子を非表示にするには、「.htaccess」というファイルを扱っていきます。
htaccessはWebサーバーの設定ファイルで、ディレクトリ単位でいろんな制御をすることができます。

既存のhtaccessファイルがある場合は、すでになんらかの設定がされていると思いますので、ファイルの編集前にバックアップを取ってから作業を進めてください。

サンプルとして、ドメインのルートの下の「lp」というディレクトリ内に、PHPスクリプト等のWebページがあるとします。
以下のイメージは、ローカル開発環境になります。

htaccessファイルの設置



実際にサーバーでは、「.htaccess」というファイルを作成して以下の記述をし、「lp」というディレクトリアップロードしていきます。
記述した設定は、htaccessファイルを設置したディレクトリ以下の下階層が対象となります。

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php



以下2つは同じページが表示されます。

https://example.com/lp/sample.php
https://example.com/lp/sample



「%{REQUEST_FILENAME} !-d」と「RewriteCond %{REQUEST_FILENAME}.html -f」で、リクエストされたファイル名のディレクトリの存在と、リクエストされたファイル名に「.php」が付いたファイルが存在するかの条件でリライト処理を実行します。
「-d」はディレクトリ、「-f」はファイルを意味します。

htmlとphpが混在している場合には、以下のように記述します。

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html 
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php



違いは、「html」と「php」の記述の部分だけです。
他の拡張子も同じように処理できます。


ここまでの設定では、拡張子を付けても付けなくても同じページが表示されますが、もし、すでにあるページで拡張子があるものと、今回の作業で拡張子を無くしたのもでURLが2つ存在してしまうと、コンテンツが混在してしまいますので、SEO的にはよろしくありません。
既存のページがある状態で拡張子を非表示にする場合は、301リダイレクトをしておきましょう。

以下、「lp」というディレクトリ内に置いた「.htaccess」に、先程のhtmlとphpの拡張子を非表示にする記述の下に、以下の記述を追加します。

.htaccess

RewriteCond %{THE_REQUEST} \.(php|html)\ HTTP
RewriteRule ^(.*)\.(php|html)$ /lp/$1 [R=301,L]



「/lp/」の部分は、htaccessファイルを設置したディレクトリになります。
配置する場所に応じて変えてください。

これで拡張子を付けてアクセスしても、拡張子なしで同じページを表示することができます。

今回の内容をまとめますと、

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html 
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{THE_REQUEST} \.(php|html)\ HTTP
RewriteRule ^(.*)\.(php|html)$ /lp/$1 [R=301,L]


となります。

スッキリしたURL、また調整がしやすいURLとしていきたい場合は、サイトURLの拡張子は非表示にしておくと良いでしょう。
ぜひ参考にしてください。