回答:
Apacheプロジェクトからの推奨事項は次のとおりです。
一般に、メインサーバーの構成ファイルにアクセスできない場合にのみ.htaccessファイルを使用する必要があります。... よくある誤解は、ユーザー認証とmod_rewriteディレクティブは
.htaccess
ファイルに入れなければならないということです。
したがってAllowOverride None
、メインのhttpd.conf(および/またはサブセクションInclude
)でディレクティブと他のすべてのディレクティブの両方を設定してください
Apacheが設定されAllowOverride None
ていない場合、.htaccess
ファイルが使用されているかどうかに関係なく、すでに(わずかな)パフォーマンスの低下が発生しています。
これは、リクエストごとに Apacheが.htaccess
、リクエストされたリソースに至るすべての(サブ)ディレクトリに潜在的なファイルがあるかどうかをチェックする必要があるためです。たとえば、ファイルがディレクトリ/ www / htdocs / exampleからリクエストされた場合、apacheは次のファイルを探す必要があります。
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
そのため、そのディレクトリからのファイルアクセスごとに、それらのファイルが存在しない場合でも、さらに4つのファイルシステムアクセスがあります。(AllowOverideが/に設定されている場合)
そのために使用されるシステムコール(man 2 stat
)自体はそれほど高価ではなく、通常、実際のディスクをポーリングするのではなく、ファイルシステムキャッシュが使用され、実際のIO要件が制限されますが、それでもこの記事で論じているように、合計することができます。
1つ以上の実際の.htaccess
ファイルが実際に存在する場合、Apacheはそれを必要としてopen
読み取り(別のIO読み取り操作と、通常はファイルシステム属性を更新するためのIO書き込み操作もトリガーしatime
ます)、そのロジックを適用する前に解析します。
ディレクティブがmain httpd.conf
にある場合と異なり、起動時に一度だけ解析するためにApacheを必要とするだけで、各.htaccess
ファイルはリクエストごとに再度解釈される必要があります。
IO操作に加えて、.htaccessファイルの解析にかかる費用は、その複雑さに依存します。
慎重にベンチマークを決定する必要があります。
あなたの質問に対する単一の正しい答えがあるとは思わない。htaccessのロード時間に影響を与える可能性のある変数は多数あります。
より詳しい情報:
.htaccessを使用して、または使用せずにテストしましたが、速度やオーバーヘッドにまったく違いはありませんでした。確かに私は16サイトしか実行しておらず、それは超高速サーバーなので、私の場合、ミリ秒の追跡はほとんど不可能です。何百ものサイトを実行しているサーバーでは、@ Iainがテストして確認したように、オーバーヘッドが顕著になる場合があります。
私は個人的に仮想ホスト用の.confファイルを使用してすべてを実行します。すべてを完全に制御する.htaccessではなく、よりクリーンで、Apacheのメモリに一度ロードされます。ワードプレスの書き換えルールでさえ.confファイルに含まれているため、壊れることはありません。