基礎知識

【WordPress】.htaccess ファイルに記述された mod_rewrite モジュール設定の意味

投稿日:

1. mod_rewrite について

Apache というウェブサーバーソフトウェアには、mod_rewrite というモジュールが付いており、ウェブサーバーに送られたリクエストの宛先であるURLを書き換えることができます。リクエストは書き換え後のURLに対して送信されたものとして処理されます(ウェブブラウザにリダイレクトすることもできます)。

書き換えるためのルールは、「Apache の設定ファイル」もしくは「.htaccess ファイル」に記述できるのですが、レンタルサーバーの場合は、Apache の設定ファイルに個別のサイトに関する設定を記述するのは難しいため、通常は .htaccess ファイルに記述されます。

ここでは本サイトの .htaccessファイルに記述されているルール設定について解説します。

2. 本サイトでの書き換えルール

本サイトの.htaccess ファイルに記述されている書き換えルールが以下です。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressp

これは WordPress が自動的に生成したのですが、WordPress の設定によっては異なる内容になることもあります。ソースコードでいうと、WordPress/class-wp-rewrite.php あたりが自動生成処理のようです。

では、この設定を 6つのパートに分けてそれぞれ説明していきます。

パート1

# BEGIN WordPress
{省略}
# END WordPress

先頭に # がついている行はコメントです。

パート2

<IfModule mod_rewrite.c>
{ここに記述する}
</IfModule>

mod_rewrite モジュールに関する設定は、上の記述で囲みます。rewriteモジュールが存在していれば、囲んだ内容が読み込まれます。

パート3

RewriteEngine On

書き換えエンジンを有効 (On) にします。

パート4

RewriteBase /

URL のプレフィックス (prefix) を指定します。相対パスで置換ルールを書いた場合に、置換後のURLの先頭にここで指定した文字列が追加されます。

パート5

RewriteRule ^index\.php$ - [L]

RewriteRule ディレクティブのフォーマットは以下です。

RewriteRule 正規表現パターン 置換文字列 [フラグ]

各引数について表で説明します。

正規表現パターン
  • HTTPリクエストにセットされた宛先URLのパス部分(ドメインより下の部分)にマッチするか判定するのに使用される正規表現パターンです。Perl互換の正規表現を使います。
  • 例えば https://rs.fitallright.com/foo/bar にアクセスした場合、”foo/bar” の部分と比較されます。
置換文字列
  • 正規表現パターンがマッチした場合に、置換される文字列です。
  • 置換文字列が相対パスであれば、RewriteBase に指定した文字列が先頭に追加されます。
  • 後方参照が使用できます。
  • 「-」と記述すると、置換が行われません。
フラグ
  • [ と ] の間にフラグ文字を指定します。カンマ気切りで複数のフラグを指定することができます。
  • [L]: 条件にマッチした場合、そこで判定を終了させます。
  • [R]: 302リダイレクトさせます。[R=404] と書くと、404リダイレクトになります。

今回の場合は第一引数が「^index\.php$」となっており、これは index.php というファイル名に直接アクセスされた場合にマッチします。第二引数が「-」となっているので置換は行われず、[L] フラグが指定されていることから、mod_rewrite の処理はここで終了します。つまり、URLパスは index.php のままでリクエストが処理されます。

パート6

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

1行目と2行目では、RewriteCond ディレクティブによって条件を指定しています。「(1行目の条件が真)且つ(2行目の条件が真)」という関係になり、これが満たされた場合は、3行目の RewriteRule ディレクティブの処理が行われます。

1行目は「リクエストされたURLパスで指定されるファイルが存在しなかった場合」、2行目は「リクエストされたURLパスで指定されるディレクトリが存在しなかった場合」という意味になります。

3行目では、第一引数が「.」であるためにどんなURLでもマッチし、/index.php というURLパスに置換されて処理されます。[L]フラグが指定されているので、rewrite の処理はここで終了です。

今回の場合、mod_rewrite の設定はここまでしか記述されていないため、1,2行目の条件が満たされない場合は、置換が起きず元のURLでアクセスされます。

まとめると、以下の動作になります。

  • 指定されたURLパスに合致するファイルかディレクトリが存在すればそれにアクセスさせる。
  • 存在しなければ /index.php にアクセスさせる。

詳しく知りたい方は、mod_rewrite – Apache HTTP Server Version 2.4 を参照してください。

3. まとめ

今回取り上げた設定内容がどういう動きになるのかについてまとめます。

  1. index.php にアクセスがあれば、そのままアクセスさせる。
  2. 実在するファイルにアクセスがあれば、そのままアクセスさせる。
  3. 実在するディレクトリにアクセスがあれば、そのままアクセスさせる。
  4. それ以外の場合は、index.php にアクセスさせる。

4. 参考

-基礎知識
-

執筆者:fitallright

関連記事

共用サーバーの「SSH接続」について

VPSはもちろんのこと、共用サーバーであっても「SSH」が使えるプランが多く存在しています。 レンタルサーバー業者によっては、「シェルログイン(SSH)」という項目になっている場合もあります。 本ペー …

レンタルサーバー利用者に役立つDNS(とネームサーバ)の知識

レンタルサーバーを使う上で、DNS(とネームサーバ)に関して知っているとよい内容を図にしてみました。 目次1. 前提2. 用語3. 取得したドメインとDNSサーバーを利用している図4. DNSサーバー …

【初心者向け】レンタルサーバーで何ができるのか?

レンタルサーバーを借りると何ができるのでしょうか? レンタルサーバーがどういったものなのか分からない方のために、「レンタルサーバーを借りるとできること」の基本について具体的な手順とその画面などを交えて …

無料ブログサービスの比較

無料ブログサービスを比較します。

PHPバージョンのサポート状況について

PHPバージョンのサポート状況について説明します。

ロリポップ!「スタンダードプラン」
さくらのレンタルサーバ「スタンダードプラン」