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

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

Другие вопросы по тегам