Redirect Nginx:重定向短URL的服务器名称和子域上的条件

Redirect Nginx:重定向短URL的服务器名称和子域上的条件,redirect,nginx,short-url,Redirect,Nginx,Short Url,我希望根据服务器名称有条件地重定向,但重定向到的位置也取决于子域。例如,这里是我的基本配置 server { listen 80; return 301 https://$host$request_uri; } server { listen 443; server_name company.com compa.ny; ssl on; ssl_client_certificate /etc/ssl/certs/godaddy_CA.crt;

我希望根据服务器名称有条件地重定向,但重定向到的位置也取决于子域。例如,这里是我的基本配置

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name company.com compa.ny;
    ssl on;
    ssl_client_certificate /etc/ssl/certs/godaddy_CA.crt;
    ssl_certificate /etc/ssl/certs/wildcard.company.com.crt;
    ssl_certificate_key /etc/ssl/private/wildcard.company.com.key;
    ssl_prefer_server_ciphers on;
    root /var/www/company;
    access_log /var/log/nginx/nginx.access.log;
    error_log /var/log/nginx/nginx.error.log;
    client_max_body_size 8M;
    location ^~ /application {
        proxy_set_header HOST $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080;
    }
}
我希望有一些东西可以查找短url主机“compa.ny”并重定向到“company.com/shortUrldRedirector”,我还希望包含子域,因此在dev或qa中这将正常工作:

https://compa.ny/abc123 -> https://company.com/shortUrldRedirector/abc123

and

https://dev.compa.ny/abc123 -> https://dev.company.com/shortUrldRedirector/abc123

我看到有一个
$server\u name
config变量,但是我如何完成关于子域的上述重定向?

我将使用如下映射构造:

map $http_host $long_domain {
    default      company.com;
    dev.compa.ny dev.company.com;
    compa.ny     company.com;
}

server {
    ...
    return 301 https://$long_domain/shortUrldRedirector$request_uri;
}

那很有趣,让我试试这个。一秒钟。可以在映射中使用正则表达式吗,例如“dev\d+.compa.ny”?是的,表达式的开头应该是~,例如“~dev[0-9]*.compa.ny”。您认为这样的形式会被认为是不好的吗
if($host~“^(.*?\.compa.ny”){return301 https://$1.company.com/shorturldirect/$request_uri;}
我认为在上面的返回值之前需要某种条件。