nginx: リダイレクトなしでサブドメインをサブディレクトリに書き換える

nginx: リダイレクトなしでサブドメインをサブディレクトリに書き換える

http://api.example.org/xyznginx でリクエストを書き換えて、実際に舞台裏で呼び出すようにしたいですexample.org/api/xyz。また、難しいのは、CodeIgniter を使用しているため、/xyz/index.php に PHP スクリプトをロードするのではなく、XYZ コントローラーで CodeIgniter の /index.php を参照する必要があることです。現在は次のように設定しています。

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

...しかし、これによりブラウザで顕著なリダイレクトが発生します。書き換えがシームレスに、またはバックグラウンドで行われるようにしたいので、次のことを試しました。

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

しかし、それでは「入力ファイルが指定されていません」というエラーが発生します。:( 以前に、nginx 上の codeigniter コントローラーにサブドメインを書き換えようとした人はいますか?

ありがとう!

答え1

私は一日中これを理解しようとしましたが、結局は実に単純なことでした。私が最終的にやったことは次のとおりです。

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

うわー!これについて何か問題があると思われる方は、ぜひ教えてください!でも、動作しているようです。

関連情報