
我希望 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;
...
}
哇!如果有人發現這有任何潛在的錯誤,請告訴我!似乎正在工作。