【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」での設定方法にまとめています。
Warning: count(): Parameter must be an array or an object that implements Countable in /home/yskymk/www/000web/ysklog/mod-rewrite/wp-includes/class-wp-comment-query.php on line 405
コメント
まだコメントはありません。