nginx: reescribe el subdominio en el subdirectorio sin redirigir

nginx: reescribe el subdominio en el subdirectorio sin redirigir

Me gustaría que nginx reescribiera cualquier http://api.example.org/xyzsolicitud para llamar example.org/api/xyzdetrás de escena. La parte complicada también es que estoy usando CodeIgniter, por lo que en lugar de cargar un script php en /xyz/index.php, lo necesitaré para hacer referencia a /index.php de CodeIgniter con el controlador XYZ. Ahora mismo lo tengo configurado así:

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

...pero eso provoca que se produzca una redirección notable en el navegador. Quiero que la reescritura sea fluida y se produzca detrás de escena. Entonces lo intenté:

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

Pero eso me da el error "No se ha especificado ningún archivo de entrada". :( ¿Alguien ha intentado reescribir un subdominio en un controlador codeigniter en nginx antes?

¡Gracias!

Respuesta1

Pasé todo el día tratando de resolver esto y terminó siendo realmente simple, uf. Lo que terminé haciendo fue:

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

¡Cortejar! Si alguien ve algo potencialmente incorrecto en esto, ¡hágamelo saber! Aunque parece estar funcionando.

información relacionada