如何在路由参数中发送URL?

时间:2016-09-07 06:03:41

标签: php slim slim-3

我已经定义了这样的路线:

$app->map(['GET', 'POST'],'/abc/[{url}]', function ($request, $response, $args) {

    return $response;
})->add(new CustomMiddleware());

当我在没有http://的情况下传递网址时,它正常工作,但却为404 page not found - http://https://的网页提供了帮助。我也尝试过使用url编码的字符串,但同样出错:

http://localhost/slim/public/index.php/abc/http%3A%2F%2Fstackoverflow.com

The requested URL /slim/public/index.php/abc/http://stackoverflow.com was not found on this server.

我正在使用Slim Version 3.1。

1 个答案:

答案 0 :(得分:3)

在网址内使用网址

当你添加带有斜杠的url然后路由没有得到执行因为那么在路由中没有定义的url之后还有其他路径:

E.g。 example.org/abc/test工作正常但example.org/abc/http://x 仅适用于此/abc/{url}//{other}的路线定义。

在网址内使用已编码的网址

Apache会阻止%5C \的{​​{1}}和%2F的{​​{1}}请求,其中包含404 Not Found错误,这是出于安全原因。因此,您不会从瘦身框架中获取404,而是从您的网络服务器获取。所以你的代码永远不会被执行。

您可以在apache中设置AllowEncodedSlashes On /来启用此功能。

我的修正此建议

将url添加为get参数,有效的是在不更改apache配置的情况下使用编码斜杠。

示例电话httpd.conf

http://localhost/abc?url=http%3A%2F%2Fstackoverflow.com