3

我为我的域设置了 htaccess,但我希望一个特定的 URL 没有 htpasswd 保护。该 URL 是一个重写的 URL,并且没有与之关联的实际目录。

有没有办法使用root htaccess 来htpasswd 保护整个站点,除了那个特定的URL?

编辑(我的代码,包括 Jon Lin 的建议,这对我不起作用):

RewriteCond %{SERVER_NAME} =subdomain.example.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
SetEnvIf Request_URI "^/messenger/parse" NOPASSWD=true
AuthUserFile /xxx/xxx/xxx/xxxxxx/subdomain.example.com/.htpasswd
AuthName "Staging Server"
AuthType Basic
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=NOPASSWD
4

1 回答 1

3

您可以设置诸如SetEnvIf为给定的请求 URI 设置环境变量之类的设置。然后在 auth 定义中,您可以使用Satisfy AnyandAllow from env指令告诉 apache 可以通过身份验证或环境变量是否存在(仅针对特定 URI 设置)授予访问权限。例子:

# set the NOPASSWD variable if the request is for a specific URI
SetEnvIf Request_URI "^/specific/uri/nopasswd/$" NOPASSWD=true

# Auth directives
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
AuthType Basic
Order Deny,Allow
# Any requirment satisfies
Satisfy any
# Deny all requests
Deny from all
# except if user is authenticated
Require valid-user
# or if NOPASSWD is set
Allow from env=NOPASSWD
于 2012-07-11T18:46:34.143 回答