nginx:將子網域重寫到子目錄而不重新導向

nginx:將子網域重寫到子目錄而不重新導向

我希望 nginx 重寫任何http://api.example.org/xyz實際example.org/api/xyz在幕後呼叫的請求。棘手的部分是我使用的是 CodeIgniter,所以我需要它使用 XYZ 控制器來引用 CodeIgniter 的 /index.php,而不是在 /xyz/index.php 載入 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;
    ...
}

哇!如果有人發現這有任何潛在的錯誤,請告訴我!似乎正在工作。

相關內容