スポンサーリンク

.htaccessのmod_rewriteについて

WordPrwss
スポンサーリンク

.htaccessのmod_rewriteについて調べて見ました。

WordPressを使用していると.htaccessに次のように書かれているのを目にします。

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

これは何をしているのだろうということで調べてみました。

IfModule mod_rewrite.c

<IfModule mod_rewrite.c>
 ・・・
</IfModule>

まずはこの部分。
mod_rewriteが使えるかを確認しています。
mod_rewriteが使えるならの間の処理をおこないます。

RewriteEngine

「RewriteEngine」と、mod_rewriteを使う際の宣言文です。
URLの書き換えをおこなう最初に一度だけ書いておけばOK(書き換えの都度書いてもOK)。

RewriteEngine On

と書いておきます。

RewriteEngine Off

で無効にできますが、使わないかな?

RewriteBase

URLを書き換えたの後のファイルがあるディレクトリのパスを示します。
例えば .htaccessをtestディレクトリに置いて、testディレクトリにあるindex.htmlにアクセスがあった場合、honyaディレクトリにあるhoge.htmlを表示してみます。
RewriteBase は「RewriteBase /honya」とします。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /honya
RewriteRule ^index\.html$ "hoge.html" [L]
</IfModule>

のように書きます。

にアクセスしてみると

書き換え後もURLはhttps://linkgear.jp/test/index.htmlのままですが、https://linkgear.jp/honya/hoge.htmlの内容が表示されてます。

RewriteBase を「RewriteBase /」として見ると

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ "hoge.html" [L]
</IfModule>

「RewriteBase /」はルートディレクトリを示しているので、404エラーになります。

RewriteRule

書き換えのルールを書きます。

書式は
RewriteRule 書き換え元 書き換え先 [オプション]
で、書き換え元、書き換え先共に正規表現が使えます。

オプションは色々あるようですが、私が使いそうなのは[L]と[R=301]
[L]はRewriteでの書き換えを終了します。
[R=301]はリダイレクトします。

RewriteCond

URLの書き換えを行う条件を指定します。
RewriteCondは直後にあるRewriteRuleにしか適用されません。
また条件(RewriteCond)が複数ある場合は、最初の条件が次の条件を引き続き実行することになります。

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

この場合では書き換え元のURL(REQUEST_FILENAME)がファイル(-f)でない(!)場合で、尚且つ書き換え元のURL(REQUEST_FILENAME)がディレクトリ(-d)でない(!)場合にRewriteRuleを実行します。

ご注意

当ブログの記事は全て記載した時点での内容となります。ご覧頂いた時期によっては情報が古くなっていることがあります。

WordPrwss
スポンサーリンク
periodをフォローする

コメント

タイトルとURLをコピーしました