コンテンツにスキップ

WordPress のデフォルトの .htaccess の意味

メインイメージ

WordPress のデフォルトの .htaccess の記述について説明します。

WordPress をインストールして立ち上げると次の内容の .htaccess ファイルがインストールディレクトリに配置されます。

# BEGIN 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

まとめ

WordPress のデフォルトの .htaccess は次の 4 つのことを行っています。

  1. mod_rewrite モジュールが提供する URL 書き換え機能を有効化
  2. PHP が利用できるように環境変数 HTTP_AUTHORIZATION にリクエストの Authorization ヘッダの値をセット
  3. リクエストの URL が index.php に一致する場合はそのまま処理する
  4. リクエストの URL に該当するファイルやディレクトリが存在しない場合はインストールディレクトリ直下の index.php でリクエストの処理を行う

# BEGIN WordPress# END WordPress

WordPress が .htaccess に変更を加えるときに利用されるマーカー。 WordPress が .htaccess を変更するときはこの # BEGIN WordPress と `# END WordPress`の間に変更が行われる。

Apache は # で始まる行をコメントとして扱うためこれらの行は Apache から見るとただのコメント。

RewriteEngine On

mod_rewrite という Apache モジュールが提供する URL 書き換え機能を有効にする。

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

環境変数 HTTP_AUTHORIZATION が PHP 側で直接利用できない環境でも WordPress が正しく動作するためにリクエストヘッダーの値を環境変数をセットする。

  • RewriteRule: URL 書き換えのルールを設定するためのディレクティブ
  • .*: 対象の URL を表す正規表現。 .* は任意の文字列にマッチするためすべてのリクエストに適用される。
  • -: 書き換え先の URL 。 - は置換をしないことを意味する。
  • [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]: リクエストヘッダーの Authorization を環境変数を HTTP_AUTHORIZATION にセットする。

WordPress 内では REST API などで利用される。

RewriteBase /

URL 書き換えの起点となるベース URL を / に指定する。

RewriteRule ^index\.php$ - [L]

リクエスト URL が index.php の場合は以降のディレクティブを評価しない(プログラムにおける return 文のようなもの)。

  • ^index\.php$: 対象の URL を表す正規表現。 ^ は文字列の先頭、 $ は末尾を表すため、 ^index\.php$ はリクエスト URL が index.php に完全一致することを意味する。
  • -: 書き換え先の URL
  • [L]: このルールを最後( Last )に評価して、その後のルールを無視する。

RewriteCond %{REQUEST_FILENAME} !-f

リクエストされた URL に該当するファイルが存在しない場合は次のディレクティブに進む。

  • RewriteCond: URL 書き換えの条件を設定するためのディレクティブ
  • %{REQUEST_FILENAME}: リクエストされたファイルパスを格納した環境変数
  • !-f: -f はファイルが存在するなら true 、しなければ false となる。 !not を表すので !-f で「ファイルが存在しないなら true 」となる。

RewriteCond %{REQUEST_FILENAME} !-d

リクエストされた URL に該当するディレクティブが存在しない場合は次のディレクティブに進む。

  • !-d: -d はディレクトリが存在するなら true 、しなければ false となる。 !not を表すので !-d 全体で「ファイルが存在しないなら true 」となる。

RewriteRule . /index.php [L]

すべてのリクエストの URL を /index.php に置き換える。 結果として、 WordPress インストールディレクトリ直下の index.php ファイルにリクエスト処理の制御を行わせる。

  • .: 対象の URL を表す正規表現。 . は任意の文字にマッチするためすべてのリクエストに適用される。
  • /index.php 書き換え先の URL

この設定があることで WordPress のパーマリンク機能や 403 ・ 404 ページなどがいい感じに動作します。

WordPress.org の関連ページ

関連ページ