查询字符串身份验证htaccess apache

时间:2015-01-11 23:46:57

标签: wordpress .htaccess authentication mod-rewrite

我的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>

1 个答案:

答案 0 :(得分:0)

使用这些工具无法轻松完成您想要的任务。遗憾。

您正在执行的操作无效,因为无论您在.htaccess中如何对其进行排序,都会在重写规则之前处理身份验证规则。这是违反直觉的。让我们看一个简单的例子。

加载页面时,首先处理身份验证规则。那时,RewriteRule尚未评估。因此未设置NoAuth。因此,Allow from env=NoAuth不允许任何人进入。在处理完身份验证规则之后,会重写URL(在您的情况下,它不会更改,但这无关紧要)并且NoAuth已定义,但是访问规则不会被重新评估,因此无关紧要。

获取QUERY_STRING数据进行身份验证没有很好的简单方法。这是一个kluge,但SetEnvIf可以工作。您可以使用RewriteRule首先使用某个QUERY_STRING重写请求,并在URI中添加一些值得注意的内容,然后添加第二个SetEnvIf来检查该URI。如果只有SetEnvIf可以访问查询字符串,这将是一步,但它不能,所以它是两个。