【问题标题】:What does the question mark in this codeigniter nginx rewrite means?这个codeigniter nginx rewrite中的问号是什么意思?
【发布时间】:2013-11-15 23:28:26
【问题描述】:

我正在将我的 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)将值发布到控制器时会中断。

我的问题

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

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

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

中断并且不调用控制器,而是试图直接调用controller?code=somecodehere。这个路由可以解决这个问题,但我就是不明白怎么做。

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

谢谢。

【问题讨论】:

    标签: codeigniter nginx rewrite url-routing


    【解决方案1】:

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

    所以

    abc

    变成:

    /index.php ? /abc

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

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

    【讨论】:

    • 那么,对于像controller 这样的每个请求,它是否会调用index.php?/controller,即使url 中没有get 参数?
    • 是的,它只是将/anything?something 重写为/index.php?/anything%3Fsomething 并在index.php 中处理。之后就没有魔法了
    • 以及如何在此重写中处理对控制器的请求? /controller?code=something 之类的东西是如何处理的?
    • codeigniter 在$_SERVER['QUERY_STRING'] 中将其作为字符串获取并处理它
    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2017-05-13
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多