CodeIgniter - 使用 GET 变量路由 url

CodeIgniter - Routing urls with GET Variables

我检查了那里的类似问题,但这些似乎没有帮助。

我有一个类似的电子邮件验证,它将在 CodeIgniter 中路由到正确的函数,并将数据传递给该函数以供进一步处理。

样本URL:

http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407

当前路线:

$route['verify/(:any)'] = 'formcontroller/verification/';

函数:

public function verification($slug)
    {
        parse_str(parse_url($slug, PHP_URL_QUERY), $fileds);
        var_dump($fields);
    }

问题是,当我尝试上面列出的 url 时得到 404。当我尝试 http://amazon.dev/verify/asdasdasd

之类的东西时,我得到 Message: Undefined variable: fields

有人能指出我正确的方向吗?

ADD :如果 url 中没有 ?,它会起作用。但是对于一个get查询的标准应该是url,我想知道如何解决这个

只有URL的路径段是可路由的,不需要解析查询参数...

通过 $_GET 超全局(如在原始 PHP 中)或通过 Input class' get() method.

访问它们

? 不是

中 URI 段中允许的字符
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs.  When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/

位于application/config/config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-'; 

你可以附加 ?到名单

这里是 url 编码字符的列表 http://www.degraeve.com/reference/urlencoding.php

据我所知,路由没有收到查询字符串。所以,你应该从 GET 数组中获取变量。为此,第一个测试 config.php set

$config['allow_get_array'] = TRUE;

然后在控制器中:

public function verification($slug)
    {
    $fields['id'] = $this->input->get('id');
    $fields['hash'] = $this->input->get('hash');
    var_dump($fields);
    }

问题实际上是,查询在 / 之后开始。

实际上 url 应该在这个模型中,? 紧跟在目录名称之后。

http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407

路线应该是

$route['verify'] = 'formcontroller/verification';

并且应该使用 CodeIgniterget 方法处理变量。

$this->input->get('variablename');

此外,url 应该是 urlencoded 以防万一有任何字符不是配置文件独占允许的。

Config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-=';