PHPファイルでもURLは拡張子.htmlで見れるようにする方法
- 公開日:2015/11/17
既存の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