在 WordPress 管理员上,我通过在 nginx 配置中使用以下命令对 nginx 进行基本的 http 身份验证:
location ^~ /wp-login.php {
auth_basic "Restricted Area: WordPress";
auth_basic_user_file /etc/nginx/wp.htpasswd;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
现在这个工作,但我需要添加一个排除wp-login.php?action=postpass
我从中学到文章nginx 如何选择使用哪个位置块来服务特定请求。^~
用于覆盖我们可能拥有的任何规则,我认为我需要以一种存在正则表达式规则和精确规则的方式指定,这应该完成所需的工作。
这对我来说最有意义,但它不起作用:
location = /wp-login.php?action=postpass {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~* /wp-login.php {
auth_basic "Restricted Area: WordPress";
auth_basic_user_file /etc/nginx/wp.htpasswd;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
另外,尝试了其他随机组合,但完全没有成功。需要注意的是,当请求 URL 只是wp-login.php
URL 中的某个内容或 URL 后面的任何内容时,应该使用基本身份验证,但以下情况除外?action=postpass
请提供建议!提前致谢!
答案1
类似这样的事应该可以
set $shouldauth "Restricted Area: WordPress";
if ($arg_action ~* postpass) {
set $shouldauth off;
}
location ~* /wp-login.php {
auth_basic $shouldauth;
auth_basic_user_file /etc/nginx/wp.htpasswd;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}