【问题标题】:disable http auth for specific rewritten location禁用特定重写位置的 http auth
【发布时间】:2026-01-19 00:15:01
【问题描述】:

我需要将 apache 设置为反向匹配 /admin 位置,该位置由默认的 drupal htacess 文件重写。只需为所有不是 /admin/* 的东西请求 http auth

到目前为止,我已经尝试过:

 
AuthName“仅限会员” AuthType 基本 AuthBasicProvider 文件 AuthUserFile /path/to/.htpasswd 需要有效用户

【问题讨论】:

    标签: apache mod-rewrite authentication


    【解决方案1】:

    您可以尝试使用 SetEnvIf 来检查 /admin 的 Request_URI,因此您应该得到如下结果:

    # Set an environment variable if requesting /admin
    SetEnvIf Request_URI ^/admin/? DONT_NEED_AUTH=true
    
    # Setup your auth mechanism
    AuthName "Members Only"
    AuthType Basic
    AuthBasicProvider file
    AuthUserFile /path/to/.htpasswd
    
    # 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
    

    如果您没有将其放入 .htaccess 文件中,您可能需要将其包装在适当的或标记中。

    【讨论】:

    • 我在 /var/www 的目录标签中尝试了这些,导致每个请求都需要身份验证
    • 您是否尝试过用 Drupal 重写的内容替换 /admin?我不确定哪个模块顺序优先,mod-setenv 或 mod-rewrite
    •  SetEnvIf Request_URI "^/admin/?$" do_auth=1 AuthName "Members Only" AuthType Basic AuthBasicProvider file AuthUserFile /path/to/.htpasswd Require valid-user Order Allow,Deny Allow从所有拒绝来自 env=do_auth 满足任何 
      作品,但我无法扭转它,这就是我需要的
    • 我发布的内容在我的 .htaccess 中有效,任何以 /admin 开头的请求都不会通过身份验证,其他所有内容都需要身份验证。这就是您的意思对所有不是/admin/的东西都要求http auth,对吗?
    • 如果不是这种情况并且我读错了你的问题,那么使用我所拥有的,除了将Allow from env=DONT_NEED_AUTH 更改为Allow from env=!DONT_NEED_AUTH