我的htaccess文件中有一组代码。目的是在有人访问wp-login.php文件时要求用户身份验证。但是,我希望在使用查询字符串“action = postpass”时能够灵活地禁用身份验证。
例如,如果我使用enter: http://domain.com/wp-login.php - 出现一个身份验证框 http://domain.com/wp-login.php?action=postpass - 未显示身份验证框。
似乎Apache在mod_rewrite之前执行了mod_auth模块。所以,目前,只要用户调用wp-login.php,就会出现一个身份验证框。
<Files wp-login.php>
RewriteEngine on
RewriteCond %{HTTP_HOST} (.*)?(domain.com) [NC]
RewriteCond %{REQUEST_URI} ^/?wp-login\.php [NC]
RewriteCond %{QUERY_STRING} action=postpass [NC]
RewriteRule ^(.*)$ - [env=NoAuth,L]
AuthUserFile "/home/passwd"
AuthType Basic
AuthName "Protected Area"
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=NoAuth
</Files>
答案 0 :(得分:0)
使用这些工具无法轻松完成您想要的任务。遗憾。
您正在执行的操作无效,因为无论您在.htaccess
中如何对其进行排序,都会在重写规则之前处理身份验证规则。这是违反直觉的。让我们看一个简单的例子。
加载页面时,首先处理身份验证规则。那时,RewriteRule
尚未评估。因此未设置NoAuth
。因此,Allow from env=NoAuth
不允许任何人进入。在处理完身份验证规则之后,会重写URL(在您的情况下,它不会更改,但这无关紧要)并且NoAuth
已定义,但是访问规则不会被重新评估,因此无关紧要。
获取QUERY_STRING
数据进行身份验证没有很好的简单方法。这是一个kluge,但SetEnvIf
可以工作。您可以使用RewriteRule
首先使用某个QUERY_STRING
重写请求,并在URI
中添加一些值得注意的内容,然后添加第二个SetEnvIf
来检查该URI。如果只有SetEnvIf
可以访问查询字符串,这将是一步,但它不能,所以它是两个。