.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$/
.
我需要启用密码保护,除非设置了某个获取参数。
当前工作代码(在文件夹 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$/
.