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

有没有一种方法可以使用根htaccess来htpasswd保护整个站点,但该特定URL除外?

编辑(我的代码,包括乔恩·林的建议,对我不起作用):

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

最佳答案

您可以设置诸如SetEnvIf之类的东西来为给定的请求URI设置环境变量。然后在auth定义中,您可以使用Satisfy AnyAllow 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

10-04 09:56