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 つのことを行っています。
mod_rewrite
モジュールが提供する URL 書き換え機能を有効化- PHP が利用できるように環境変数
HTTP_AUTHORIZATION
にリクエストのAuthorization
ヘッダの値をセット - リクエストの URL が
index.php
に一致する場合はそのまま処理する - リクエストの 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 ページなどがいい感じに動作します。