仅当存在 htaccess 文件时,如何应用基本身份验证?
如果首先尝试将auth_basic
指令放在一个if
块中,但这是不允许的。
然后,我尝试重定向到一个命名位置,但是虽然具有基本身份验证的位置工作正常,但重定向(当没有 htaccess 文件时发生)出错了。
这是该配置的样子:
server {
listen 80;
server_name ~^(?<instance>.+?)\.foo.example.com$;
set $htaccess_user_file /var/htaccess/$instance.foo.example.com.htaccess;
if (!-f $htaccess_user_file) {
rewrite ^ @foo;
}
location / {
auth_basic "Restricted";
auth_basic_user_file $htaccess_user_file;
root /var/www/$instance.foo.example.com;
try_files $uri /index.html =404;
}
location @foo {
root /var/www/$instance.foo.example.com;
try_files $uri /index.html =404;
}
}
这是我在没有 htaccess 文件时收到的错误消息:
2013/07/12 08:37:08 [error] 32082#0:
*192 open() "/usr/html@foo" failed (2: No such file or directory),
client: 1.2.3.4, server: ~^(?<instance>.+?)\.foo.example.com$,
request: "GET / HTTP/1.1", host: "bar.foo.example.com"
我感觉这与某些变量被命名位置覆盖有关,但我不确定。
最后,我尝试alias
在命名位置使用,这样@foo
就不会成为搜索目录的一部分,但alias
不允许在命名位置.... fuuuu
这就是建议我做的
MTecknology
事情。kolbyjack
#nginx
完美地工作!
如果您有多个条目需要将块移动到相关位置,则此答案的扩展。
/location
if