LocationMatch を使用して Apache で一連の URL ベースのルールを設定しようとしていますが、正規表現が理解できない動作をしているようです。
ドキュメントを調べてみましたが、私の問題に対する WRT はあまり明確ではありません...また、インターウェブに関する他の質問/回答もそうではありません。
以下は、私の Location ディレクティブと、LocationMatch ディレクティブの構造の一般的な例です。
<Location />
Header set X-Intelligence "CatchAll"
</Location>
<LocationMatch "\.(pdf)$">
Header set X-Intelligence "pdf1"
</LocationMatch>
- これらのディレクティブはすべて、ssl を使用した仮想ホスト内にあります。
- 構成内の他の場所で、他の Location または LocationMatch ディレクティブを使用していません。
- LocationMatch ディレクティブはすべて、私の CatchAll Location ディレクティブの後に来ます。
<Location />ディレクティブのみを使用すると、すべてが正常に機能します。
ここで使用されている正規表現と、私が経験した正規表現との間にいくつかの違いがあることに気付きました..
- 開始/終了スラッシュを使用しても機能しないようです。
- /i /g などの終了修飾子タグを使用しても機能しません。
- 以下に示すその他の動作の違い
私は多くの異なることを試しましたが、ここに私の結果のいくつかの例があります:
1.
<LocationMatch "(?i)\.(pdf)$">
Header set X-Intelligence "pdf1"
</LocationMatch>
- 上記は、すべての .pdf および .PDF 拡張子の URL に一致するようです。
でも:
<LocationMatch "\.(pdf)$">
Header set X-Intelligence "pdf1"
</LocationMatch>
- .pdf 拡張子の URL には一致しません。
- .pdf は CatchAll によってキャッチされません (404 not found と表示されます)。
- .PDF (大文字) は CatchAll によってキャッチされます。
.
2. 似ていない:
<LocationMatch "\.(docx?)$">
Header set X-Intelligence "doc2"
</LocationMatch>
- 上記は私の .docx URL と一致します。
でも:
<LocationMatch "\.(doc)$">
Header set X-Intelligence "doc2"
</LocationMatch>
<LocationMatch "\.(docx)$">
Header set X-Intelligence "doc22"
</LocationMatch>
- 上記は .docx URL と一致しません。
- CatchAll (404 not found) によってキャッチされません。
- 順序を並べ替えてみましたが、それでも同じ結果が得られます。
何が起こっているのかわかりませんが、動作は完全に私が期待するものではありません.
私が間違っている可能性があることや、私が理解していないことについて何か考えがありますか?
この質問をより良くするための提案をお待ちしています。ありがとう。