「.htaccess」の記述方法・文言の意味【まとめ解説】
RewriteEngine on
「RewriteEngine on」は、URL書き換えシステム(mod_rewrite)を有効にしますよ、という意味です。
.htaccess内に1つ書いておけばOK。2つ以上書く意味はありません。
ちなみに「RewriteEngine off」というのもあります。
「RewriteEngine off」を記述すると、.htaccessに書かれているすべてのURL書き換えシステム(mod_rewrite)の記述が無効になるので便利です。
「わざわざコメントアウトするのも面倒だけど、一時的に全部ルールを無効にしたい!」ってときに使ってください。
IfModule mod_rewrite.c
<IfModule mod_rewrite.c>
</IfModule>
で囲んだソースコードは、URL書き換えシステム(mod_rewrite)が有効の場合だけ動作します。
URL書き換えシステム(mod_rewrite)が無効の場合は動作せずに、無視されます。
URL書き換えシステム(mod_rewrite)はバグの原因になりやすい仕組みなので、レンタルサーバーによっては最初から使用不可にしているところがあります。
そういうレンタルサーバーの.htaccessにURL書き換えシステム(mod_rewrite)のソースコード記述してしまうと、エラーが表示されてしまいます。
その場合のことを考えて
よって、URL書き換えシステム(mod_rewrite)が有効になっているレンタルサーバーの場合は、
RewriteCond
「RewriteCond」は、リダイレクトの条件を定義するための記述です。
「RewriteCond」で条件を先に記述し、最後に「RewriteRule」(リダイレクト先)を指定するといった書き方をします。
こんな感じです。
RewriteCond 条件
RewriteRule リダイレクト先
RewriteCond(条件)を複数記述することもできます。
複数記述した場合、AND・ORの2つの動作を選択できます。
すべての条件が一致した場合にのみリダイレクトが発生する「AND」と
条件のどれかが一致した場合にリダイレクトが発生する「OR」です。
ANDの例
全てのRewriteCond(条件)が一致した場合のみ、リダイレクトされます。
ANDの場合は、条件を並べて記述するだけなので簡単。
RewriteCond 条件
RewriteCond 条件
RewriteRule リダイレクト先
ORの例
どちらかのRewriteCond(条件)が一致した場合に、リダイレクトされます。
ORの場合は、語尾に[OR]を記述します。
RewriteCond 条件 [OR]
RewriteCond 条件
RewriteRule リダイレクト先
よく見かける表現「%{REQUEST_FILENAME} !-f」「%{REQUEST_FILENAME} !-d」とは?
「%{REQUEST_FILENAME} !-f」というのは、「ファイルが存在しない」という意味です。
「!-f」の部分が肝で、「-f」がファイル、「!」が否定(存在しない)を表現しています。
fはファイルの頭文字ということですね。
同様に「%{REQUEST_FILENAME} !-d」というのは、「ディレクトリ(フォルダ)が存在しない」という意味です。
dはディレクトリの頭文字。
たとえば・・・
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
上記の記述だと、「ファイルが存在しない&ディレクトリが存在しない場合、index.phpへリダイレクトしてくれ!」という意味になるわけです。
ちなみに「%{REQUEST_FILENAME}」は、ファイルへのパス(URL)です。