【问题标题】:Phalcon Micro "handle()" method decodes URIPhalcon Micro“handle()”方法解码URI
【发布时间】:2017-06-02 09:36:45
【问题描述】:

我的 Phalcon Micro 应用程序接收带有编码斜杠 (%2F) 的 URI 部分。

例如,在调用$app->handle()之前:

echo $app->request->getURI(); // -> /resources/res%2F01/all

但看起来 $app->handle() 方法正在解码我的 URI,将我的 %2F 转换为斜杠。于是,下面的路由规则……

$app->get('/resources/{code:[^\/]+}/all', function() { /* ... */ });

... 将无法正常工作,因为 %2F 现在是斜线。控制器端,%2F 不再存在。

echo $code // -> res/01

有没有办法告诉 Phalcon 不要解码 URI?


编辑

最终,Phalcon 没有解码 URI,而是基于 $_GET['_url'] 参数进行路由,并且那里已经缺少 %2F 代码。

【问题讨论】:

    标签: php phalcon phalcon-routing


    【解决方案1】:

    路由正则表达式不接受您的网址。您不允许在路由定义中使用斜杠 - [^\/]+

    如果你想路由匹配这个url,路由定义必须是这样的:

    $app->get('/resources/{code:.+}/all', function() { /* ... */ });
    

    有没有办法告诉 Phalcon 不要解码 URI?

    我认为没有。

    【讨论】:

    • 不错。我认为.+ 正则表达式也会占用/all 部分,看起来不是。至于 Phalcon,在查看源代码后,它似乎没有解码 URI,而是基于 $_GET['_url'] 并且那里已经缺少 %2F。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多