nginx:将子域重写为不redirect的子目录

我想让nginx重写任何http://api.example.org/xyz请求,在幕后调用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; } 

…但是会导致浏览器中出现明显的redirect。 我想重写是无缝的/在幕后发生。 所以我试了一下:

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

但是,这给了我一个“没有input文件指定”的错误。 :(有没有人尝试在nginx之前重写一个子域到codeigniter控制器?

谢谢!

我花了整整一天的时间来解决这个问题,结果很简单,呃。 我最终做的是:

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

呜! 如果有人看到任何可能的错误,请lemme知道! 似乎工作,虽然。