Web サイトの URL から .html
や .php
などの拡張子を取り除き、シンプルにアクセスさせたいケースがあります。Apache の .htaccess
に Rewrite ルールを追加することで、拡張子を隠してアクセスできるようにできます。本記事ではその基本設定を解説します。
前提条件
- Apache の
mod_rewrite
が有効になっていること .htaccess
が利用可能なサーバー環境であること
.html を省略してアクセスする設定
例として、about.html
に対して https://example.com/about
でアクセスできるようにします。
# .htaccess
RewriteEngine On
# .html を省略
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/?$ $1.html [L]
about
というパスにアクセスがあった場合、実際のファイル about.html
を参照します。
.php を省略してアクセスする設定
PHP ファイルに対しても同様に拡張子を省略できます。
# .php を省略
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
これにより contact
にアクセスしても contact.php
が表示されます。
.html と .php を両方対応させる
HTML と PHP の両方を対象にしたい場合は、条件を組み合わせます。
RewriteEngine On
# .html または .php を省略
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f [OR]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.html [L]
RewriteRule ^([^/]+)/?$ $1.php [L]
URL を統一する(リダイレクトする)
上記設定は「拡張子なし URL を入力しても拡張子ありファイルを呼び出す」仕組みですが、逆に拡張子付きでアクセスされたときに「拡張子なし」に統一したい場合はリダイレクトを追加します。
# 拡張子付きのアクセスをリダイレクト
RewriteCond %{THE_REQUEST} ^.*/([^/]+)\.html
RewriteRule ^ %1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/([^/]+)\.php
RewriteRule ^ %1 [R=301,L]
これにより SEO 的にも「拡張子なし URL」に統一できます。
まとめ
.htaccess
でRewriteRule
を使えば拡張子を省略可能.html
や.php
それぞれに対応する条件を記述する- リダイレクトを設定すれば、拡張子なし URL に統一でき SEO 的にも有利
拡張子を省略することで URL がシンプルになり、ユーザーにも検索エンジンにも優しい設計にできます。