nginx: reescreva o subdomínio para o subdiretório sem redirecionar

1

Eu gostaria que o nginx reescrevesse todas as solicitações de http://api.example.org/xyz para realmente chamar example.org/api/xyz nos bastidores. A parte complicada também é que eu estou usando o CodeIgniter, então, em vez de carregar um script php em /xyz/index.php, eu precisarei dele para fazer referência ao /index.php do CodeIgniter com o controlador XYZ. Agora eu tenho configurado assim:

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

... mas isso faz com que um redirecionamento perceptível ocorra no navegador. Eu quero que a reescrita seja perfeita / ocorra 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!

    
por taber 01.09.2013 / 21:39

1 resposta

1

Eu 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;
    ...
}

Woo! Se alguém vir alguma coisa potencialmente errada sobre isso, por favor deixe-me saber! Parece estar funcionando embora.

    
por 01.09.2013 / 22:59