.htaccessで「/about/slug/ → /about/slug.html」にリダイレクトする方法

Webサイトを運営していると、ディレクトリ形式(/about/slug/)でアクセスされた場合に、
実際のHTMLファイル(/about/slug.html)へリダイレクトしたい場面があります。
特に静的サイトを管理している場合や、SEO的にURLを正規化したい場合には重要な設定です。

この記事では、Apacheの.htaccessを使って /about/ ディレクトリ配下の
URLをシンプルに301リダイレクトする方法を紹介します。

想定するケース

  • アクセスURL:
    http://sample.com/about/profile/
  • 実際のファイル:
    http://sample.com/about/profile.html

このとき、ユーザーが /about/profile/ にアクセスしても、
自動的に /about/profile.html へリダイレクトされるようにします。

.htaccessの設置場所

  • サーバーの /about/ ディレクトリ内.htaccess ファイルを設置してください。
  • ファイル名は必ず .htaccess(ドット付き) です。

実際のコード例

# /about/.htaccess
RewriteEngine On
Options -MultiViews

# 既存のファイルやディレクトリがあればそのまま表示
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]

# /about/slug/ → /about/slug.html に301リダイレクト
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/?$ $1.html [R=301,L]

コード解説

  • RewriteEngine On
    Apacheのリライトルールを有効化します。
  • Options -MultiViews
    ApacheのMultiViews機能をOFFにする設定です。これを入れないと、リダイレクトではなく直接 slug.html が表示されてしまうことがあります。
  • RewriteCond %{REQUEST_FILENAME} -d [OR]
  • RewriteCond %{REQUEST_FILENAME} -f
    もしアクセスされたパスが「実在するフォルダ」または「実在するファイル」なら、そのまま処理を止めるようにしています。これで意図しないリダイレクトを防げます。
  • RewriteCond %{REQUEST_FILENAME}\.html -f
    .html ファイルが存在する場合のみ、次のルールを実行します。
  • RewriteRule ^([^/]+)/?$ $1.html [R=301,L]
    /slug/ または /slug というリクエストを /slug.html へ301リダイレクトします。

実際の動作例

  • http://sample.com/about/profile/
    http://sample.com/about/profile.html
  • http://sample.com/about/company/
    http://sample.com/about/company.html
  • http://sample.com/about/info/
    http://sample.com/about/info.html

確認方法

設定を保存したら、シークレットモードや別ブラウザでアクセスしてみましょう。
キャッシュが残っているとリダイレクトが確認できないことがあります。

ターミナルから curl コマンドで確認するとより確実です。

curl -I http://sample.com/about/profile/

結果のレスポンスヘッダーに

HTTP/1.1 301 Moved Permanently
Location: http://sample.com/about/profile.html

と出れば成功です。

まとめ

  • .htaccess/about/ フォルダに設置する
  • Options -MultiViews で不要な自動解決を無効化する
  • .html ファイルが存在する場合のみ /slug/ → /slug.html に301リダイレクト

これで、ユーザーも検索エンジンも一貫したURLに誘導でき、SEO的にも安心です。