nginx: переписать поддомен в подкаталог без редиректа

nginx: переписать поддомен в подкаталог без редиректа

Я бы хотел, чтобы nginx переписывал все http://api.example.org/xyzзапросы, чтобы они действительно вызывались example.org/api/xyzза кулисами. Сложность в том, что я использую CodeIgniter, поэтому вместо загрузки скрипта php в /xyz/index.php мне нужно, чтобы он ссылался на /index.php CodeIgniter с контроллером XYZ. Сейчас у меня все настроено так:

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

...но это приводит к заметному перенаправлению в браузере. Я хочу, чтобы переписывание было бесшовным/происходило за кулисами. Поэтому я попробовал:

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

Но это приводит к ошибке «Не указан входной файл». :( Кто-нибудь пробовал переписать поддомен в контроллер codeigniter на nginx?

Спасибо!

решение1

Я потратил весь день, пытаясь разобраться, и в итоге все оказалось очень просто, уф. В итоге я сделал следующее:

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

Ура! Если кто-то видит в этом что-то потенциально неправильное, пожалуйста, дайте мне знать! Хотя, кажется, работает.

Связанный контент