![如何在 nginx 中有条件地映射两个相同的变量?](https://linux22.com/image/738965/%E5%A6%82%E4%BD%95%E5%9C%A8%20nginx%20%E4%B8%AD%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E6%98%A0%E5%B0%84%E4%B8%A4%E4%B8%AA%E7%9B%B8%E5%90%8C%E7%9A%84%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我想$sub
有条件地设置依赖于$request_uri
和的变量$host
。
map $request_uri $sub {
default front;
~^/api/.* api;
~^/rest/.* rest;
}
map $host $sub {
hostnames;
#default $sub; # Tried, no success
ping.* ping;
admin.* admin;
}
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param HTTP_X_SUB $sub;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location / {
try_files $uri $uri/ /index.php;;
}
}
我以为如果主机名不在列表中,nginx 将不会覆盖$sub
,但不幸的是它只是将其清空。map $host $sub
$sub
因此基本上应该像$host
“ping”或“admin”一样进行$sub
相应设置。如果主机名不匹配,则检查$request_uri
。
知道如何存档该声明吗?
编辑:扩展了配置。