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のみを公開する方法を誰かに教えてもらえれば幸いです。
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
_
さて、[^.]
は「.
ではない」という意味です。そのため、/.somefile
は一致しません。最後の例が機能しない理由として考えられるのは、Perl互換の正規表現がApache 2.0以降でのみサポートされているためです。したがって、Apache 1.3を使用している場合(質問ではApacheのバージョンを指定する必要があります)、それでいい。
維持する
<Location />
AuthType Basic
AuthUserFile /web/.htpasswd
AuthName "Test Site"
Require valid-user
</Location>
この新しい場所を追加します
<Location /services>
Satisfy any
Order deny,allow
</Location>
成功せずに多くの方法を試しました。
そして最後に、これはApache2.2で機能します。
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>
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>