我已经定义了这样的路线:
$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。
答案 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