.htaccess とは?
Apache ウェブサーバーのディレクトリ単位の設定ファイル。
ファイル名は .htaccess(ドット始まり)で、特定のディレクトリに置くとそのディレクトリ以下すべての挙動を制御できる。
通常の Apache 設定は httpd.conf というサーバー全体の設定ファイルで行うが、レンタルサーバーでは
httpd.conf を直接編集できない。
.htaccess はサーバー管理者の権限がなくても、ディレクトリ単位で設定を上書きできる仕組みとして用意されている。
配置場所と効果範囲
| 配置場所 | 効果範囲 |
|---|---|
サイトルート(/public_html/) |
サイト全体 |
/public_html/blog/ |
/blog/ 以下のみ |
通常は WordPress がインストールされているサイトルートに 1 つ置くだけで OK。
.htaccess でできること
| 機能 | 例 |
|---|---|
| リクエストの書き換え | HTTP → HTTPS へ 301 リダイレクト、URL 正規化 |
| アクセス制限 | 特定の IP やボット UA をブロック(403 を返す) |
| ファイル保護 | wp-config.php や .htaccess 自体への直接アクセスを拒否 |
| レスポンスヘッダーの追加 | HSTS・CSP・X-Frame-Options などセキュリティヘッダーの付与 |
| キャッシュ制御 | 画像・CSS・JS のブラウザキャッシュ有効期限を設定 |
| 圧縮 | Gzip 圧縮でレスポンスサイズを削減 |
使える環境・使えない環境
.htaccess は Apache ウェブサーバー専用の機能。国内の主要レンタルサーバーはほぼ Apache
のため、そのまま使える。
主要レンタルサーバーの対応状況
| サーバー | 対応 |
|---|---|
| エックスサーバー | ✅ 使える |
| ConoHa WING | ✅ 使える |
| シン・レンタルサーバー | ✅ 使える |
| さくらインターネット | ✅ 使える |
| ロリポップ | ✅ 使える |
| VPS(Nginx を自前構築) | ❌ 使えない |
| KUSANAGI(Nginx モード) | ❌ 使えない |
Nginx 環境の場合: 設定は
nginx.confやserverブロックで行う。書き方は違うが概念は共通なので、.htaccessの知識は無駄にならない。
WordPress との関係
WordPress が自動生成するブロック
WordPress の「設定 → パーマリンク設定」を保存すると、.htaccess に以下のブロックが自動生成される。
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへの変更はすべて上書きされます。
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
カスタムルールを書く場所
# BEGIN WordPress 〜 # END WordPress の間は WordPress
が自動的に上書きするため、直接編集してはいけない。カスタムルールはこのブロックの外(上)に追記する。
# ✅ ここにカスタムルールを書く(WordPress ブロックより上)
# 例: HTTPS リダイレクト
RewriteEngine On
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
# (WordPress 自動生成ブロック — 触らない)
...
# END WordPress
Wordfence・EWWW Image Optimizer などのプラグインが生成するブロックも同様に触らない。
基本構文の 3 つの柱
.htaccess に登場するコードのほとんどは、次の 3 つのディレクティブの組み合わせで成り立っている。
IfModule → 「このモジュールは使える?」(安全装置)
└ RewriteCond → 「この条件に合致する?」(if 文)
└ RewriteRule → 「条件を満たしたのでこう処理する」(実行)
<IfModule> — モジュールの安全装置
指定した Apache モジュールが有効な場合にのみ、中のディレクティブを実行する。モジュールが存在しない環境で <IfModule> なしに書くと
500 エラーでサイトダウンになるため、必ず囲む。
# mod_rewrite が有効なときだけ実行される
RewriteEngine On
...
RewriteCond — 条件(if 文)
直後の RewriteRule を実行するかどうかを判定する条件文。複数行並べるとデフォルトで AND
条件(すべて満たしたときだけ実行)。
RewriteCond %{テスト文字列} パターン [フラグ]
RewriteRule — 処理の実行
条件を満たした場合に URL の書き換えやリダイレクトを実行する。
RewriteRule パターン 置換先 [フラグ]
ディレクティブとフラグの詳細は ディレクティブ・フラグ解説ガイド で解説している。
注意事項
編集前に必ずバックアップを取る
.htaccess の記述ミスは 即座に 500 エラー(サイトダウン)
につながる。編集前にかならずバックアップを取っておくこと。
| バックアップ方法 | 手順 |
|---|---|
| FTP / ファイルマネージャー | 既存の .htaccess をダウンロードしてローカルに保存 |
| ファイル名を変えてコピー | サーバー上で .htaccess.bak などにリネームコピー |
500 エラーが出たときのリカバリ
編集後に 500 エラーが発生したら、バックアップファイルを元の名前に戻せばサイトは復旧する。詳しいリカバリ手順は リカバリ方法ガイド を参照。