44

サイトは共有ホスティングにあります。1 つの URL をパスワードで保護する必要があります。

http://www.example.com/pretty/url

明らかに、これは私が保護しようとしている物理ファイル パスではなく、特定の URL にすぎません。

.htaccess を使用した簡単な解決策はありますか?

4

10 に答える 10

78

Satisfy anymod_env とディレクティブの組み合わせを使用してこれを行うことができるはずです。を使用して、物理パスでなくてもSetEnvIf確認できます。Request_URI次に、変数がAllowステートメントで設定されているかどうかを確認できます。したがって、パスワードを使用してログインする必要があるか、パスワードAllowなしでログインできます。

# Do the regex check against the URI here, if match, set the "require_auth" var
SetEnvIf Request_URI ^/pretty/url require_auth=true

# Auth stuff
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
AuthType Basic

# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is NOT set
Allow from env=!require_auth
于 2013-01-30T13:20:56.597 に答える
20

<LocationMatch>これを行うには、または単にディレクティブ<Location>内で使用できます<VirtualHost>(httpd.conf / vhost.conf にアクセスできると仮定します。代わりに、サイトをそのように構成する必要がある場合は、ドキュメント ルートの .htaccess に同様のものを配置することもできます)。 .

例えば:

<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /var/www/blabla
  # Other usual vhost configuration here
  <Location /pretty/url>
    AuthUserFile /path/to/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Password Protected"
    AuthType Basic
    require valid-user
  </Location>
</VirtualHost>

<LocationMatch>きれいな URL に対して正規表現を一致させたい場合は、より便利かもしれません。ドキュメントはこちらです。

于 2014-11-17T19:22:54.910 に答える
13

リックはコメントで、この質問には答えがないと述べているので、私が使用するスニペットは次のとおりです。

AuthName "Protected Area"
AuthType Basic
AuthUserFile /path/to/your/.htpasswd
AuthGroupFile /dev/null

SetEnvIf Request_URI .* noauth
SetEnvIf Request_URI the_uri_you_want_to_protect !noauth
SetEnvIf Request_URI another_uri !noauth
SetEnvIf Request_URI add_as_many_as_you_want !noauth

<RequireAny>
  Require env noauth
  Require valid-user
</RequireAny>

Apache 2.2 および Apache 2.4 のサポートが必要な場合 (明らかに、両方のバージョンが並行して実行されるセットアップがあります...):

AuthName "Protected Area"
AuthType Basic
AuthUserFile /path/to/your/.htpasswd
AuthGroupFile /dev/null

SetEnvIf Request_URI .* noauth
SetEnvIf Request_URI the_uri_you_want_to_protect !noauth
SetEnvIf Request_URI another_uri !noauth
SetEnvIf Request_URI add_as_many_as_you_want !noauth

<IfModule mod_authz_core.c>
    <RequireAny>
        Require env noauth
        Require valid-user
    </RequireAny>
</IfModule>

<IfModule !mod_authz_core.c>
    Order Deny,Allow
    Deny from all
    Satisfy any
    Require valid-user
    Allow from env=noauth
</IfModule>

Apache 2.2 のコードは、Jon Linから取られています。

于 2017-07-21T15:22:27.113 に答える