首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel中路由过程中防止多个斜杠?

如何在Laravel中路由过程中防止多个斜杠?
EN

Stack Overflow用户
提问于 2020-06-26 22:32:29
回答 1查看 416关注 0票数 0

如何在Laravel中路由过程中防止多个斜杠?http://localhost/page/1 - work and it work...http://localhost/////page/1 -应该返回404或重定向此错误也在Laravel网站上。https://laravel.com////docs/5.5/errors#http-exceptions

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-26 23:21:55

需要说明的是,这不是一个bug。bug意味着这是框架开发人员明确表示不应该发生的事情,但实际发生了。这主要是一种未定义的行为。

发生这种情况的原因是因为请求确定当前路径的方式:

Request::path()

代码语言:javascript
运行
复制
public function path()
{
    $pattern = trim($this->getPathInfo(), '/');
    return $pattern == '' ? '/' : $pattern;
}

这将从当前pathinfo修剪/以获取路径。这并不是不合理的做法,因为您通常不需要前导斜杠和尾随斜杠,但这样做的结果是,具有许多前导斜杠和尾随斜杠的路径也将像https://laravel.com////docs/5.5/errors/////#http-exceptions一样工作

发生这种情况的原因是由于Route::getValidators() (特别是使用$request->path()的UriValidator )返回的标准路由验证器

如果你真的坚持要“修复”这个问题,那么你可以添加一个自定义的验证器来检查这个东西:

代码语言:javascript
运行
复制
class MyUriValidator implements ValidatorInterface  {

    public function matches(Route $route, Request $request)
    {
        $path = $request->getPathInfo();
        return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));
    }
}

然后,您可以在AppServiceProvider中注册这个额外的验证器

代码语言:javascript
运行
复制
public function boot() {
    Route::$validators = array_merge(Route::getValidators(), [ new MyUriValidator ]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62597028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档