无法从http基本身份验证中排除路由

问题描述 投票:0回答:1

我正在尝试从http基本认证中排除特定路由。

我的.htaccess看起来像这样:

# Set an environment variable if requesting /dev
SetEnvIfNoCase Request_URI ^/dev/? DONT_NEED_AUTH=true

# Require authentication
AuthUserFile /etc/users
AuthName "This is a protected area"
AuthGroupFile /dev/null
AuthType Basic

# Set the allow/deny order
Order Deny,Allow

# Indicate that any of the following will satisfy the Deny/Allow
Satisfy any

# First off, deny from all
Deny from all

# Allow outright if this environment variable is set
Allow from env=DONT_NEED_AUTH

# or require a valid user
Require valid-user

# Rewrite url (make it pretty)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ index.php?path=$1 [NC,L,QSA]

如果我为路由“ / dev”使用了完全相同的.htaccess http身份验证,那么它可以按预期工作,但是问题是我希望为路由“ / dev”提供密码保护,但是我想删除密码保护路由“ / dev / guest”。

我尝试更改为以下内容:

SetEnvIfNoCase Request_URI ^/dev/guest/? DONT_NEED_AUTH=true

并在中间转义斜线:

SetEnvIfNoCase Request_URI ^/dev\/guest/? DONT_NEED_AUTH=true

但是这两个选项都不起作用,所有路由再次受到密码保护。

而且,由于路由被重写,因此我想允许的实际URL是“ dev / index.php?path = guest”,但我不确定是否应该关心它,因为其中一部分是查询字符串,并且最终用户将永远不会直接使用该路由。

非常感谢您的帮助。

.htaccess mod-rewrite apache2 apache2.4
1个回答
0
投票

终于找到了可行的解决方案。

使用此:

SetEnvIf Request_URI /dev/guest noauth=1
<RequireAny>
    Require env noauth
    Require env REDIRECT_noauth
    Require valid-user
</RequireAny>
© www.soinside.com 2019 - 2024. All rights reserved.