htaccessの内容と書き方を理解しよう

htaccessの内容と書き方を理解しよう

.htaccessの設定って何を書いてあるのかイマイチ理解ができていなかったので
改めて内容をまとめるとともに、理解を深めようと思います。

そもそも.htaccessとは何だろう?

.htaccessは、WEBサーバーのディレクトリ事の制御(設定)ファイルです。
サイトやページのリダイレクト処理、Basic認証をかけて特定ユーザー以外サイトを見れないようにする、404ページの設定を行う等が.htaccessファイルで行える処理になります。
Apacheなどが使用されている環境でのみ使用することが可能です。

.htaccessの有効範囲について

.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認証のかけ方についてはまた記事にしたいと思います。

WordPressの基礎情報カテゴリの最新記事