【问题标题】:Cannot exclude route from http basic auth无法从 http 基本身份验证中排除路由
【发布时间】:2020-09-09 05:51:15
【问题描述】:

我正在尝试从 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】:

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

    用过这个:

    SetEnvIf Request_URI /dev/guest noauth=1
    <RequireAny>
        Require env noauth
        Require env REDIRECT_noauth
        Require valid-user
    </RequireAny>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      相关资源
      最近更新 更多