nginx: reescrever subdomínio em subdiretório sem redirecionamento

nginx: reescrever subdomínio em subdiretório sem redirecionamento

Gostaria que o nginx reescrevesse quaisquer http://api.example.org/xyzsolicitações para realmente ligar example.org/api/xyznos bastidores. A parte complicada também é que estou usando o CodeIgniter, então, em vez de carregar um script php em /xyz/index.php, precisarei dele para fazer referência ao /index.php do CodeIgniter com o controlador XYZ. No momento estou configurado assim:

if ($host = "api.example.org") {
    rewrite ^(.*)$ http://example.org/api$1 permanent;
}

... mas isso causa um redirecionamento perceptível no navegador. Quero que a reescrita seja perfeita/ocorre nos bastidores. Então eu tentei:

if ($host = "api.example.org") {
    rewrite ^(.*)$ /api$1 last;
}

Mas isso me dá um erro "Nenhum arquivo de entrada especificado". :( Alguém já tentou reescrever um subdomínio em um controlador codeigniter no nginx antes?

Obrigado!

Responder1

Passei o dia todo tentando descobrir isso e acabou sendo muito simples, ugh. O que acabei fazendo foi:

location ~* \.php$ {
    ...
    if ($host ~ ^api\.) {
        set $api "/api";
    }
    fastcgi_param REQUEST_URI $api$request_uri;
    ...
}

Uau! Se alguém vir algo potencialmente errado sobre isso, por favor, deixe-me saber! Parece estar funcionando.

informação relacionada