.htaccess:如果设置了 get 参数,则禁用密码保护的 if 语句

.htaccess: if statement to disable password protection if get parameter is set

我需要启用密码保护,除非设置了某个获取参数。

当前工作代码(在文件夹 secure 中启用保护):

<If "%{HTTP_HOST} =~ /^(?:.+\.)*sub\.domain\.com$/">
    SetEnvIfNoCase Request_URI "^/secure/" SECURE
</If>
Require valid-user
Order      allow,deny
Allow from  all
Deny from env=SECURE

打电话时,例如https://sub.domain.com/secure/?access_token=12345,不应该启用密码保护,像这样

<If "%{HTTP_HOST} =~ /^(?:.+\.)*sub\.domain\.com$/">
    <If "%{QUERY_STRING} != /^access_token$/">
        SetEnvIfNoCase Request_URI "^/secure/" SECURE
    </If>
</If>

但是 "%{QUERY_STRING} != /^access_token$/" 给我一个内部服务器错误。

<If "%{QUERY_STRING} != /^access_token$/">

内部服务器错误可能是由于使用 != (not-equal) 运算符引起的,与 strings 一起使用而不是 [=13] =] (not-match) 运算符与正则表达式进行比较。例如,它应该是:

 <If "%{QUERY_STRING} !~ /^access_token$/">

虽然当 QUERY_STRING 不完全是 access_token 时这自然是成功的。访问令牌 value 被省略。所以,也许你还需要 /^access_token=12345$/.