web-dev-qa-db-ja.com

apachelocationmatch否定正規表現

Apacheを介して場所を公開しようとしています。通常、私は私の仮想ホストにこのブロックを持っています

<Location />
    AuthType Basic
    AuthUserFile /web/.htpasswd
    AuthName "Test Site"
    Require valid-user
</Location>

これは問題なく機能します。提供されるすべてのものには有効なユーザーが必要です。ここで、認証を必要としないサービスを公開したいので、/ servicesを除くすべての場所で認証を必要とする方法を探しています。私はLocationMatchで遊んでいますが、それが何をしているのか完全にはわかりません。

<LocationMatch ^/(?!services)[^.]*$>
AuthType Basic
...
</LocationMatch>

/ servicesとその下のすべてがLocationMatchをスキップできるようにしますが、example.com /.somefileがLocationMatchブロックをバイパスできるようにするという副作用があります。

さらに、私が試したとき

<LocationMatch ^/(?!services)>
AuthType Basic
...
</LocationMatch>

すべて(/ servicesを含む)はLocationMatchによって照合されます。

[^。] *クラスが2番目のテストでは実行しないことと、他のすべてのパスを認証下に保ちながら/ servicesのみを公開する方法を誰かに教えてもらえれば幸いです。

5
Jeff

Antonio Lorussoによるこのページ は、Apache認証からフォルダーを除外するために次のことを提案しています。

<Location "/">
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/www/clients/client12/web17/passwd
AuthGroupFile /dev/null
Require valid-user
SetEnvIf Request_URI "^/(admin|skin|js|index)(.*)$" allow
SetEnvIf Request_URI "^/favicon.ico$" allow
Order allow,deny
Allow from env=allow
Satisfy Any
</Location>

この場合、/ admin、/ skin、/ js、または/ indexで始まるURLはauthによって無視されます。

このセクションの重要な部分は次のとおりです。

SetEnvIf Request_URI "^/(admin|skin|js|index)(.*)$" allow

あなたの場合、適切なコードは次のようになります。

SetEnvIf Request_URI "^/services(.*)$" allow

_

2
kevinjones

さて、[^.]は「.ではない」という意味です。そのため、/.somefileは一致しません。最後の例が機能しない理由として考えられるのは、Perl互換の正規表現がApache 2.0以降でのみサポートされているためです。したがって、Apache 1.3を使用している場合(質問ではApacheのバージョンを指定する必要があります)、それでいい。

1
womble

維持する

<Location />
  AuthType Basic 
  AuthUserFile /web/.htpasswd
  AuthName "Test Site"
  Require valid-user
</Location>

この新しい場所を追加します

<Location /services>
  Satisfy any
  Order deny,allow
</Location>
0
NuTTyX

成功せずに多くの方法を試しました。
そして最後に、これはApache2.2で機能します。

  • 2つのパスは許可されておらず、他のパスはあります
  • それを可能にするために/から/ uiへの書き換えを追加しました

HèreはLocationMatchディレクティブの使用です

  <LocationMatch /(firstpath|secondpath).*>
            AuthType Basic
            AuthName "Restricted AREA "
            AuthUserFile /etc/Apache2/security/password
            AuthGroupFile /etc/Apache2/security/group
            Require group admin
            Order allow,deny
            Allow from 127.0.0.1
            Allow from 10.0.0.0/24
            Allow from env=allowclient

            Satisfy any
    </LocationMatch>
0
Damien C

Apache 2.4では、次のようなことができます。

<Location />
    <If "%{REQUEST_URI} =~ m#^/services/#">
        Satisfy any
        Order deny,allow
    </If>
    <Else>
        AuthType Basic
        AuthUserFile /web/.htpasswd
        AuthName "Test Site"
        Require valid-user
    </Else>
</Location>
0
Greg