我需要阻止访问目录中的所有文件,只有一个特定的文件,使用特定的查询字符串。到目前为止我一直在尝试这个,但是I REQUEST_URI没有QUERY字符串
SetEnvIf Request_URI ^index.php?myquery$ noauth=1
AuthType Basic
AuthUserFile /home/user/.htpasswd
AuthName "Pass"
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth
字符串
同样,用户应该只能访问index.php?myquery.不是index.php或任何东西.php?myquery
3条答案
按热度按时间ev7lccsx1#
SetEnvIf无法访问Apache 2.2中的查询字符串。在Python 2.4中,您可以在第二个SetEnvIf中访问查询字符串,或者只使用
下面是mod_rewrite中的一个简单示例,它在2.2 vhost上下文中工作:
字符串
注意:在htaccess/per-dir上下文中不起作用
kx1ctssn2#
不要认为你可以在这里做你想做的事情,因为你不能使用mod_rewrite来改变请求(auth模块发生在rewrite模块之前),你不能匹配请求URI中的查询字符串。您可能需要使用一些重定向技巧,例如:
1.创建一个名为
index2.php
的index.php
的符号链接(以便它们是同一个文件)1.使
SetEnvIf
调用简单地匹配^/index.php
1.* 在 *
index.php
脚本中(可能在最上面),让它查找是否有myquery
查询字符串,如果没有,则将请求重定向到/index2.php
1.当浏览器被告知转到
/index2.php
时,它会被要求进行身份验证1.如果浏览器输入正确的auth,
index.php
将被执行(因为步骤#1)。5w9g7ksd3#
如果您使用的是Apache 2.4,则不再需要SetEnvIf和mod_rewrite解决方法,因为Require指令能够直接解释expressions:
Apache 2.4将不按分组的Require指令视为在中,其行为类似于“or”语句。
允许访问/callbacks/foo
字符串
是否允许访问/callbacks/foo?secret_var=42:
型
这个例子将允许访问/callbacks/foo?secret_var=42,但需要/callbacks/foo的用户名和密码:
型