.htaccessの設定って何を書いてあるのかイマイチ理解ができていなかったので
改めて内容をまとめるとともに、理解を深めようと思います。
そもそも.htaccessとは何だろう?
.htaccessは、WEBサーバーのディレクトリ事の制御(設定)ファイルです。
サイトやページのリダイレクト処理、Basic認証をかけて特定ユーザー以外サイトを見れないようにする、404ページの設定を行う等が.htaccessファイルで行える処理になります。
Apacheなどが使用されている環境でのみ使用することが可能です。
.htaccessの有効範囲について
図で示したように.htaccessを設置すると、その階層以下のファイルに影響を及ぼします。
例えばTOPのディレクトリに.htaccessを設置した場合、TOP以下のnewsやcontact、blogまたnewsの下位ページであるjapan、overseaのすべてに.htaccessに記述した内容が反映されます。
赤枠で囲んだ範囲ですね。
そこで、newsのディレクトリに追加で.htaccessを設置するとします。
この場合newsとその下位ページであるjapan、overseaのディレクトリにはnewsに設置した.htaccessの記述内容が優先的に適用されます。
例えば
① TOPの.htaccessでnews/overseaをnews/foreignにリダイレクト
② newsの.htaccessでnews/overseaをnews/abroadにリダイレクト
をかけた場合は②のリダイレクトが優先されます。
青枠で囲んだ範囲ですね。
それ以外(親の階層であるTOP、同階層のcontact、blog)には影響がでません。
.htaccessの中身を理解する
今回は実際にWordPressでパーマリンク設定をした際、自動で作成された.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 WordPress
こんな感じ。
一つずつ見ていきましょう。
IfModule mod_rewrite.c
現在のサーバー環境でmod_rewriteが行えるかどうかを確認しています。
もしmod_rewriteが使えるようであれば、中に記述された動作を行います。
mod_rewrite
URLの書き換えを行うモジュールです。
WordPressでいうとパーマリンクの変更(リダイレクト)がこれに当たります。
RewriteEngine
mod_rewriteの機能を制御します。Onと記述すれば有効、Offと記述すれば無効になります。
RewriteBase
mod_rewrite後にベースとなるURLの指定しています。
サイトURLがhttps://hoge.com/wp/となっており、/wp/にWordPressがインストールされている場合
ここでは/wp/が記述されています。
ベースとなるURLがドメイン直下であれば「RewriteBase /」と記述されます。
RewriteCond
処理のルールを定義しています。
まずRewriteRuleが記述されています。
RewriteRule ^index\.php$ – [L]
ここではリクエストされたファイル名がindex.phpなら、そのまま処理を続けるように記述されています。
次にRewriteCondが記述されています。
こちらは指定した正規表現のパターンと一致していれば、次に書かれる条件を引き続き実行するように指示しています。
RewriteCond %{REQUEST_FILENAME}の後ろを見てみると
!-f
!-d
の2つのパターンが記述されています。
!マークが否定の指示になり、「f」がファイル、「d」がディレクトリを表しています。
よって、ここでは「URLで指定したファイル名とディレクトリ名が無い場合」以下の記述を実行するという処理になります。
RewriteRule
URLの書き換えを行うルールを記述しています。
上記のコードを見ると
. /index.php [L] このように書かれています。
.(ドット)はURLの正規表現です。ドットは全ての条件で適用するという意味の記述です。
全てのリクエストは/index.phpに書き換えられるということになります。
[L]・・・Lastという意味で、この記述が適用される最後の処理となります。
これらをすべてまとめると
URLがindex.phpだった場合はそのまま処理を続け、URLでリクエストされたファイル名かディレクトリ名のところに実際にファイルかディレクトリがあればそれを返し、なければWordpressのindex.phpに行くよう処理をしています。
その後index.php側でリクエストされたURLの解析が行われ、リライトのルールに則りindex.phpに付随するパラメータに応じてURLの形を書き換える処理が行われています。
ものすごくざっくりいうとパーマリンク設定したURLに書き換えてページを表示するよーということですかね。
まとめ
というわけでWordPressの.htaccessで行われている処理をまとめてみました。
なんとなく動きのイメージはつかめたかなと思いますが、実際に色々触ってみないと処理の是非は分からなそうですね…
リダイレクトの処理の仕方やBasic認証のかけ方についてはまた記事にしたいと思います。