私は最近、同じ種類の問題を把握する必要がありました。この投稿は正しい方向を示していましたが、将来このトピックを検索する人々の啓発のために、いくつかの明確な情報を共有したいと思いました.
David さん、最初の FilesMatch は機能していませんでした。FilesMatch は、ファイル システムに存在する実際の物理ファイルに対してのみ機能するからです。http://httpd.apache.org/docs/current/sections.htmlは次のように述べています。
Directory および Files ディレクティブは、対応する正規表現とともに、ディレクティブをファイル システムの一部に適用します。
これが、LocationMatch を使用した 2 番目の投稿で問題が解決された理由でもあります。また、http://httpd.apache.org/docs/current/sections.htmlから、次のように述べています。
一方、 Location ディレクティブとその対応する正規表現は、ウェブスペース内のコンテンツの構成を変更します。< SNIP > ディレクティブは、ファイルシステムとは何の関係もありません。たとえば、次の例は、特定の URL を mod_status によって提供される内部 Apache HTTP Server ハンドラにマップする方法を示しています。ファイルシステムに server-status というファイルが存在する必要はありません。
<Location /server-status>
SetHandler server-status
</Location>
Apache ドキュメントでは、この動作を次のステートメントで要約しています。
Location を使用して、ファイルシステムの外部にあるコンテンツにディレクティブを適用します。ファイルシステムに存在するコンテンツの場合は、Directory と Files を使用します。< Location / > は例外で、サーバー全体に構成を適用する簡単な方法です。
仕組みをもっと理解したい人のために、これが私が内部を理解する方法です:
- ロケーション ディレクティブは、HTTP 要求URIに基づいて一致します(例: example.com/this/is/a/uri.htmのexample.com 部分なし)。
- 一方、Directory および Files ディレクティブは、HTTP 要求 URI のそれぞれの部分に一致するDocumentRootのファイルシステムにディレクトリ パスまたはファイルがあるかどうかに基づいて一致します。
Apache ドキュメントでは、この動作を次のように要約しています。
何をいつ使うか
ファイルシステム コンテナーと Web スペース コンテナーのどちらを選択するかは、実際には非常に簡単です。ファイルシステムに存在するオブジェクトにディレクティブを適用するときは、常に Directory または Files を使用してください。ファイルシステムに存在しないオブジェクト (データベースから生成された Web ページなど) にディレクティブを適用する場合は、 Location を使用します。
[重要!] ファイルシステム内のオブジェクトへのアクセスを制限しようとするときは、Location を使用しないことが重要です。これは、多くの異なる Web スペースの場所 (URL) が同じファイルシステムの場所にマップされ、制限を回避できるためです。