.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 フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへの変更はすべて上書きされます。
<IfModule mod_rewrite.c>
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]
</IfModule>
# END WordPress
補足:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]は WordPress 6.0 以降で追加された行。Apache がAuthorizationヘッダーを破棄する問題に対処するためのもので、REST API や Application Passwords の動作に影響する。WordPress のバージョンによって自動生成されるブロックの内容が異なる場合がある。
カスタムルールを書く場所
# BEGIN WordPress
〜
# END WordPress
の間は
WordPress が自動的に上書き
するため、直接編集してはいけない。カスタムルールはこのブロックの
外(上)
に追記する。
# ✅ ここにカスタムルールを書く(WordPress ブロックより上)
# 例: HTTPS リダイレクト
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# ⚠️ プラグインが生成するブロックも触らない(Wordfence、EWWW 等)
# ...
# BEGIN WordPress
# (WordPress 自動生成ブロック — 触らない)
...
# END WordPress
ルールの書き順は「カスタムルール → プラグイン生成ブロック →
# BEGIN WordPress」が一般的。プラグインが生成するブロック(Wordfence・EWWW Image Optimizer・Nginx Cache 等)も WordPress ブロックと同様に直接編集しない。
基本構文の 3 つの柱
.htaccess
に登場するコードのほとんどは、次の 3 つのディレクティブの組み合わせで成り立っている。
IfModule → 「このモジュールは使える?」(安全装置)
└ RewriteCond → 「この条件に合致する?」(if 文)
└ RewriteRule → 「条件を満たしたのでこう処理する」(実行)
<IfModule> — モジュールの安全装置
指定した Apache モジュールが有効な場合にのみ、中のディレクティブを実行する。モジュールが存在しない環境で
<IfModule>
なしに書くと
500 エラーでサイトダウン
になるため、必ず囲む。
<IfModule mod_rewrite.c>
# mod_rewrite が有効なときだけ実行される
RewriteEngine On
...
</IfModule>
RewriteCond — 条件(if 文)
直後の
RewriteRule
を実行するかどうかを判定する条件文。複数行並べるとデフォルトで
AND 条件
(すべて満たしたときだけ実行)。
RewriteCond %{テスト文字列} パターン [フラグ]
RewriteRule — 処理の実行
条件を満たした場合に URL の書き換えやリダイレクトを実行する。
RewriteRule パターン 置換先 [フラグ]
ディレクティブとフラグの詳細は ディレクティブ・フラグ解説ガイド で解説している。
注意事項
編集前に必ずバックアップを取る
.htaccess
の記述ミスは
即座に 500 エラー(サイトダウン)
につながる。編集前にかならずバックアップを取っておくこと。
| バックアップ方法 | 手順 |
|---|---|
| FTP / ファイルマネージャー |
既存の
.htaccess
をダウンロードしてローカルに保存
|
| ファイル名を変えてコピー |
サーバー上で
.htaccess.bak
などにリネームコピー
|
500 エラーが出たときのリカバリ
編集後に 500 エラーが発生したら、バックアップファイルを元の名前に戻せばサイトは復旧する。詳しいリカバリ手順は リカバリ方法ガイド を参照。