先週から意味も解らず利用していた.htaccessの「RewriteCond」、「RewriteRule」などなどの意味がようやく解ってきたのでメモ。

さくらのレンタルサーバーにはApache無いと思っていましたが、Apache1.3がインストールされているんですね。
で、ネット上で見かける「さくらではApacheが使えない」って文章は、「Apache2.0以上でなければ利用できないサービス」って意味と、「サーバー管理者でなければ利用できないサービス」って意味なんですね。

まぁ、共用サーバで各ユーザーが勝手にApacheを停止させたり再起動かけたりしたら大変な事になりますから、当然かもしれません(^_^;

初心者の為の解説サイトを読む前の予備知識

ディレクティブ
.htaccessに記述された1行1行のコマンドをディレクティブと呼ぶらしい。
最初の頃「ディレクティブ=階層を有効化する」みたいな意味で読んでいたからドコのサイトを読んでも全く意味が解らなかった(^_^;

これさえ解れば、多少phpやjavascriptをかじった人ならドコのサイト読んでも意味が解る・・・筈。

間違ってたらゴメンナサイ

解り易い解説サイト

Apache : mod_rewriteリファレンス - dawgsdk.org
▲ここが解りやすかったです。

HTTP入門(とほほのWWW入門)
▲ディレクティブの一つ一つの意味はここで。
とほほさんのWWW入門って、こんな奥深い所まで解説があったんだ。。。
10年位前から時々利用してたけど気が付かなかった(^_^;

core - Apache HTTP サーバ
▲少し慣れてきたらココ(リンクはIfModuleの部分に入れてあります)

忘れた頃に読み返す用で、解りやすく噛み砕いてメモ

ウチのサイトに書いた.htaccessに注釈を入れておく。
以下ははスタイルシートとJavaScriptを、Gzip圧縮したファイルを別途用意しておいて、ブラウザが対応していたらそれを読み込ませる.htaccessです。(HTML内では普通に.cssと.jsを呼び出し)

<IfModulemod_rewrite.c>
   #サーバーにモジュールが組み込まれているかのチェック
   # mod_rewriteはさまざまな環境変数等に応じたリダイレクトを可能とするモジュール
RewriteEngine On
   # .htaccessでRewriteを有効化する
RewriteBase /
   #書き換えのベースとなるパスを指定するディレクティブ。「/」でルート指定。
   #ベースパスが自明である場合は記述しなくてもOK。
RewriteCond %{HTTP:Accept-Encoding} gzip
   #RewriteCondは環境変数やその他の条件に応じた判定を付加する。
   #IF構文みたいなものかな?何も指定が無ければAND属性。
   #HTTP:Accept-Encodingはブラウザが受信可能なエンコード方式をサーバに伝えます。
RewriteCond %{REQUEST_FILENAME} "\.(css|js)$"
   #REQUEST_FILENAME:リクエストされたファイルの名前を判断
   #ここではcssかjsならばTRUE。ここでは正規表現を使っているけど [OR]で繋いでもOK
RewriteCond %{REQUEST_FILENAME} !"\.gz$"
   #「!」は文字列の前につけることで、マッチしないパターンを指定
   #「.css.gz」とか圧縮ファイルを用意しているので、それを除外するため
RewriteCond %{REQUEST_FILENAME}.gz -s
   #「-s」をくっつけると、「.gz」の拡張子がくっついた同名ファイルが存在しているか
   #確認してくれます。
RewriteRule .+%{REQUEST_URI}.gz [L]
   #URL書き換えを行うルールを記述する。
   #リクエストされたURLで、ここまでの条件にマッチしたものに.gzをくっつける。
   #[L] 条件にマッチした場合そこで判定を終了する(以下に続くRewriteRuleを評価しない)
</IfModule>
   #IF分をココで閉じる。 ※IfModuleタグは入れ子可能。

これも間違ってたらゴメンナサイで(^_^;
なるほど、こうやって一個一個意味を調べてよく解った。

さらに超訳

今度はディレクティブの1行1行の意味を日本語に翻訳しておく。

  1. .htaccessによるURI書き換えをONにする
  2. ベースになるパスを指定する
  3. 条件1:ブラウザがgzに対応しているか
    対応している ⇒「4.へ」
    対応していない ⇒「終了。URLそのまま返す」
  4. 条件2:リクエストファイルの文字列の判定
    文字列に.cssまたは.jsがある ⇒「5.へ」
    ない ⇒「終了。URLそのまま返す」
  5. 条件3:リクエストファイルの文字列の判定
    文字列に「.gz」が付いている ⇒「終了。URLそのまま返す」
    ついていない ⇒「6.へ」
  6. 条件4:ファイルの存在確認
    リクエストされたファイルに「.gz」が付いたものは存在しているか?
    存在している ⇒「7.へ」
    存在しない ⇒
  7. URL書き換えを行う。(ここではリクエストURLに.gz付加)

お勉強初めてまだ1週間立たない人間のメモ書きです。
全然意味のわからないものを遣っていたのでモヤモヤしてました。
あ~、スッキリした。