「.htaccess」の記述方法・文言の意味【まとめ解説】

WEB

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)です。


Category
9WEB