PHPファイルでもURLは拡張子.htmlで見れるようにする方法

  • 公開日:2015/11/17
この記事は最終更新日から4年以上が経過しています。

既存のHTMLのページにおいてヘッダーやフッターなどの共通部分を外部ファイルすることになりました。そのためにファイルをPHP化する必要がありますが、そうすると拡張子が変わるのでURLも変わってしまいます。

いやいや、相当SEOを頑張ってきたサイトなのでURLは変えたくない!
というわけで、phpファイルだけど、URLでは拡張子を.htmlとして動作するようにする2つの方法です。

.htaccessに「AddType」を記述する

htmlファイルがあるディレクトリに以下のような内容の.htaccessファイルを配置します。

AddType application/x-httpd-php .html

※この方法は、モジュール版PHPが使用されているサーバーの場合に有効のようです。

すべてのhtmlファイルをPHPとして動作させると純粋なhtmlファイルもPHPで処理されてしまい、サーバーに負荷がかかります。そこで、実際にPHPのコードが含まれている特定のhtmlファイルのみをPHPを動作させる場合は、先ほどの記述に少し追加します。

<Files "hoge.html">
  AddType application/x-httpd-php .html
</Files>

<Files “ファイル名”>・・・</Files>の代わりに<FileMatch “正規表現”>・・・</FileMatch>を使って特定のファイルを正規表現で指定することもできます。

<FileMatch "^index.*\.html$">
  AddType application/x-httpd-php .html
<//FileMatch>

.htaccessに「mod_write」でPHPにリダイレクトする

「mod_write」を使って、.htmlから.phpにリダイレクトする方法です。
htmlファイルがあるディレクトリに以下のような内容の.htaccessファイルを配置します。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)\.html$ $1.php [L]

ディレクトリ内で拡張子が.htmlの全てのファイルで、拡張子を.phpに変更します。
これもまた、サーバーの負荷を考えて特定のhtmlファイルだけでPHPを動作させる記述ができます。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)\.html$ $1.php [L]

PHPとして動作させたいファイルだけ拡張子を.phpにします。
拡張子が.htmlのままのファイルは通常のHTMLとして動作します。

サーバーによってはまた別の方法で実現できる場合ばあるようです。
例えばロリポップなんかは、PHPにバージョンによるようですが、以下のように記述すればいいらしい。

AddHandler php5.2-script html

2020.01.28追記(よく使うのでメモ)

追記時点でのエックスサーバーでは以下のように記述すればOK

AddHandler fcgid-script .html
AddType application/x-httpd-php .html