.htaccess はApacheサーバーで使えるディレクトリ単位の設定ファイルです。リダイレクト・アクセス制限・キャッシュ設定などをコントロールできます。Webサイトの引っ越しやURLの変更時には欠かせない設定方法です。
.htaccessの基本構造
.htaccess はサイトのルートディレクトリ(public_html/ など)に設置します。mod_rewrite を使ったリダイレクトは以下の構造で書きます。
RewriteEngine On
RewriteCond %{条件変数} 条件
RewriteRule 元のパターン 転送先 [フラグ]
## HTTPSへのリダイレクト
HTTPでアクセスしたユーザーをHTTPSに強制転送します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
R=301 が301リダイレクト(恒久的)を意味し、L はこのルールを最後として処理を止めます。
wwwあり・なしの統一
SEOの観点から、www.example.com と example.com はどちらか一方に統一する必要があります。
wwwなしに統一する場合
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
### wwwありに統一する場合
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
## 特定URLのリダイレクト
ページを削除・移転した場合の301リダイレクトです。
RewriteEngine On
RewriteRule ^old-page/?$ /new-page/ [R=301,L]
複数ページを一括でリダイレクトする場合も同じルールを並べて書きます。
HTTPSとwww統一をまとめて設定
実際のサイトでは複数の条件を組み合わせて設定します。
RewriteEngine On
# HTTPSへ転送
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# wwwなしに統一
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
## よくあるミスと注意点
RewriteEngine Onの記載漏れでルールが動かない- ルールの順番が重要(上から順に処理される)
- 書き方ミスで500エラーになることがある(バックアップを必ず取ること)
- Nginxサーバーでは
.htaccessは使えない(nginx.confで設定する)
.htaccess生成ツールを使うと、HTTPS転送・www統一・セキュリティヘッダーを選択式で設定してダウンロードできます。設定後はHTTPステータスチェッカーでリダイレクトが正しく動作しているか確認しましょう。