2

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

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

重写工作。但是,我完全不明白这/index.php?/部分。

更新 :

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

我的问题

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

2) 此外,codeigniter 不会像在 get 请求中那样路由带有问号的 url。例如,像这样的获取请求

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

中断并且不调用控制器,而是试图从字面上调用controller?code=somecodehere. 这个路由可以解决这个问题,但我只是不明白如何。

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

谢谢。

4

1 回答 1

1

它不是正则表达式的一部分,而只是重写网址中的问号

所以

abc

变成:

/index.php ? /abc

你应该知道 - getphp 中的参数在问号登录 url 之后传递

现在 codeigniter inindex.php可以读取$_SERVER['QUERY_STRING']并且会得到/abc. 从这里它可以加载正确的控制器

于 2013-11-05T07:56:32.490 回答