有没有更好的方法?我找不到在 nginx 中嵌套或将布尔运算符应用于条件的方法。
基本上,如果设置了 cookie(非匿名用户),我们就会访问服务器。如果未设置 cookie 且文件存在,我们就会为文件提供服务,否则就访问服务器。
set $test "D";
if ($http_cookie ~* "session" ) {
set $test "${test}C";
}
if (-f $request_filename/index.html$is_args$args) {
set $test "${test}F";
}
if ($test = DF){
rewrite (.*)/ $1/index.html$is_args$args?
break;
}
if ($test = DCF){
proxy_pass http://django;
break;
}
if ($test = DC){
proxy_pass http://django;
break;
}
if ($test = D){
proxy_pass http://django;
break;
}
答案1
location / {
if ($cookie_session) {
proxy_pass http://django;
}
try_files $uri/index.html$is_args$args @django;
}
location @django {
proxy_pass http://django;
}
答案2
location / {
if ($cookie_session) {
rewrite ^ /django/;
}
if (-f $request_filename/index.html$is_args$args) {
rewrite (.*)/ $1/index.html$is_args$args; #did you mean ; instead of ?
}
proxy_pass http://django;
}
location /django/ {
proxy_pass http://django;
}
不确定是否更好,但避免在 if 语句中使用被认为不安全的东西。