web-dev-qa-db-ja.com

Apache LocationMatchディレクティブ内から一致する正規表現を取得することは可能ですか?

次のコードが機能するかどうか疑問に思っています。

_<LocationMatch "/(.*)([/])?(.*)">
    Order allow,deny
    Allow from all

    AuthType Basic
    AuthName "Git"
    AuthUserFile  /git/.htpasswd
    AuthGroupFile /git/.htgroup
    Require group $1
</LocationMatch>
_

これで達成しようとしているのは、最初の正規表現変数に基づくグループを要求することです。したがって、ユーザーが_http://localhost/a-repository-name_に移動した場合、URLを開くには、グループ_a-repository-name_に属している必要があります。

何らかの理由でこのコードを機能させることができず、Apacheは次を返します:Authorization of user **** to access /a-repository-name failed, reason: user is not part of the 'require'ed group(s).
_Require group $1_の適切な変数と一致していないと思います。
これは正しい方法ですか、それとも何かが足りませんか?

5
tftd

LocationMatchはバックリファレンスをサポートしていません。2.4.8より前のバージョンでは、バックリファレンスをサポートできません。

Apacheドキュメント によると、これは現在サポートされています...

2.4.8以降、名前付きグループと後方参照がキャプチャされ、対応する名前の前に「MATCH_」が付いて大文字で環境に書き込まれます。これにより、URLの要素をmod_rewriteなどの式やモジュール内から参照できます。混乱を防ぐために、番号付き(名前なし)の後方参照は無視されます。代わりに名前付きグループを使用してください。

<LocationMatch "^/combined/(?<sitename>[^/]+)">
    require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
</LocationMatch>
7
pillingworth