我正在将我的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
。这个路由负责这一点,但我只是不明白如何。
任何有关此重写的见解都会有所帮助。
感谢。
答案 0 :(得分:1)
它不是regexp的一部分,而只是重写url中的问号
所以
abc
变为:
/index.php ? / abc
你应该知道 - php中的get
参数在url
现在index.php
中的codeigniter可以从$_SERVER['QUERY_STRING']
读取并获得/abc
。从这里它可以加载适当的控制器