【.htaccess】.html/.phpを付けずにアクセスさせるRewrite設定

【.htaccess】.html/.phpを付けずにアクセスさせるRewrite設定 Webサイト全般

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」に統一できます。

まとめ

  • .htaccessRewriteRule を使えば拡張子を省略可能
  • .html.php それぞれに対応する条件を記述する
  • リダイレクトを設定すれば、拡張子なし URL に統一でき SEO 的にも有利

拡張子を省略することで URL がシンプルになり、ユーザーにも検索エンジンにも優しい設計にできます。