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 ページなどがいい感じに動作します。