【问题标题】:use basic auth based on query_string使用基于 query_string 的基本身份验证
【发布时间】:2012-07-26 20:31:44
【问题描述】:

我正在尝试保护包含特定字符串的网址:

RewriteCond %{QUERY_STRING} foo
RewriteRule - [E=NEED_AUTH:1]
Options -Indexes
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Order allow,deny
allow from all
satisfy any
deny from env=NEED_AUTH
Require valid-user

我想这应该会在加载时弹出身份验证对话框

index.php?format=foo

但它不起作用。我尝试了其他几个 RewriteConds,例如

RewriteCond %{QUERY_STRING} format=foo
RewriteCond %{QUERY_STRING} ^format=foo$

没有运气。使用

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

不记录任何内容。

有什么建议吗? :)

【问题讨论】:

    标签: apache mod-rewrite basic-authentication


    【解决方案1】:

    为了补充乔恩的答案,我遇到了与 OP 类似的问题。但我发现allow from env=!NEED_AUTH 不起作用,所以我不得不在重写条件RewriteCond %{QUERY_STRING} !format=foo 中反转它,然后反转允许allow from env=NEED_AUTH。所以,这里是有效的 sn-p:

    RewriteCond %{QUERY_STRING} !foo=bar
    RewriteRule ^ - [E=NO_AUTH:1]
    
    Order deny,allow
    Deny from all
    AuthType basic
    AuthName "Auth Needed"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    Require valid-user
    Allow from           env=NO_AUTH
    Satisfy              Any
    

    【讨论】:

      【解决方案2】:

      确保您已使用 RewriteEngine On 打开重写引擎。此外,您的 RewriteRule 中存在错误:

      RewriteRule - [E=NEED_AUTH:1]
      

      flags前需要有2个参数:

      RewriteRule ^ - [E=NEED_AUTH:1]
      

      除此之外,您似乎没有正确设置身份验证。您需要AuthName 来定义领域,没有它,apache 不会进行身份验证。而且我认为您不能使用allow from all 强制进行身份验证,您可能需要以相反的方式执行此操作,即拒绝所有和allow from env=!NEED_AUTH

      【讨论】:

        【解决方案3】:

        如此处所述 (Apache permissions based on querystring),我无法在 Apache 2.4.6 中使用“RewriteRule”和“Allow from env”的组合。

        【讨论】:

          猜你喜欢
          • 2015-08-12
          • 2021-01-25
          • 2012-07-19
          • 2015-02-06
          • 2016-10-31
          • 1970-01-01
          • 2014-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多