スポンサードリンク

【mod_rewrite】「.htaccess」と「httpd.conf」での設定による違い

mod_rewriteの設定は「.htaccess」ファイルもしくは「httpd.conf」ファイルで行います。

ここでは、その2つの設定の違いについてまとめています。

スポンサードリンク

処理速度

扱いやすさでは「.htaccess」の方がはるかに上ですが、処理速度は「httpd.conf」に比べて遅いです。

それは、「.htaccess」での方法ではサーバーに処理を再投入する必要があるからです。

詳細

mod_rewriteには2つのフェーズがあります。URL-to-filenameフェーズとfixupフェーズです。

サーバーにリクエスト(アクセス)があった場合、まずURL-to-filenameフェーズでサーバー毎のmod_rewrite設定(つまり「httpd.conf」ファイルでの設定)が行われます。

そしてその後に、fixupフェーズでディレクトリ毎のmod_rewrite設定(「.htaccess」ファイルでの設定)が行われます。

しかしURL-to-filenameフェーズでURL→ファイル名という処理が終わっているため、fixupフェーズはURL書き換えは本来できません。

しかしmod_rewriteでは、ファイル名→URLという逆戻しを行い、fixupフェーズでのURL書き換えを可能にしています。

つまり、「.htaccess」ファイルでのmod_rewrite設定では、再度サーバーに処理を投げる必要があるのです。このため、「httpd.conf」に比べて「.htaccess」の方が処理は遅くなります。

RewriteRuleに渡るURL

mod_rewriteのURL書き換えは、RewriteRuleが行います。

RewriteRule パターン 置換対象

処理の過程上、RewriteRuleにURLが渡るのですが、「.htaccess」での設定か「httpd.conf」での設定かで渡ってくるURLが違います。

詳細

例として、「http://○○○.com/index.html」というURLでアクセスがあったとします。

このとき、渡ってくるURLにはこのような違いがあります。

  • .htaccess → RewriteRuleに「index.html」が渡される
  • httpd.conf → RewriteRuleに「/index.html」が渡される

さらに踏み込むと、こんな違いがあります。

  • .htaccess → URL書き換え先のパス指定はURIとなる
  • httpd.conf → URL書き換え先のパス指定はファイルシステム上のパスとなる

mod_rewriteは「.htaccess」と「httpd.conf」の両方で設定可能ですが、それらは上記の違いがあるので、使用する際には注意が必要です。

なお、httpd.confでの設定については「httpd.conf」での設定方法にまとめています。

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント