这个codeigniter nginx重写中的问号是什么意思?

时间:2013-11-05 06:26:57

标签: codeigniter nginx rewrite url-routing

我正在将我的codeigniter文件从apache迁移到nginx,并查看nginx的重写。我遇到了以下重写以删除codeigniter index.php

if (!-e $request_filename)
{
    rewrite ^/(.*)$ /index.php?/$1 last;
    break;
}

重写有效。但是,我完全不理解/index.php?/部分。

更新:

我尝试重写不带问号,例如rewrite ^/(.*)$ /index.php/$1 last;。它适用于普通控制器,但是当第三方(如/controller?code=something等fb oauth将值发布到控制器时会中断。

我的问题

1)问号在此重写中的作用是什么?这会使 index.php 成为可选吗?

2)此外,codeigniter不会使用问号来路由url,就像在get请求中一样。例如,像这样的获取请求

http://example.com/controller?code=somecodehere

中断并且不会调用控制器,但尝试逐字地调用controller?code=somecodehere。这个路由负责这一点,但我只是不明白如何。

任何有关此重写的见解都会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

它不是regexp的一部分,而只是重写url中的问号

所以

abc

变为:

/index.php / abc

你应该知道 - php中的get参数在url

中的问号签名后传递

现在index.php中的codeigniter可以从$_SERVER['QUERY_STRING']读取并获得/abc。从这里它可以加载适当的控制器