我希望 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;
...
}
哇!如果有人发现任何可能的错误,请告诉我!不过似乎可以正常工作。