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

哇!如果有人发现任何可能的错误,请告诉我!不过似乎可以正常工作。

相关内容