为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 路由时如何防止出现多个斜杠?

Laravel 路由时如何防止出现多个斜杠?

PHP
波斯汪 2023-07-01 13:04:37
如何在 Laravel 路由过程中防止出现多个斜杠?http://localhost/page/1 - 工作并且它工作... http://localhost/////page/1 - 应该返回 404 或重定向 此错误也出现在 Laravel 网站上。 https://laravel.com////docs/5.5/errors#http-exceptions
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

发生这种情况的原因是请求如何确定当前路径:

Request::path()

public function path()

{

    $pattern = trim($this->getPathInfo(), '/');

    return $pattern == '' ? '/' : $pattern;

}

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

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

如果你真的必须坚持“修复”这个问题,那么你可以添加一个自定义验证器来检查这个确切的事情:

class MyUriValidator implements ValidatorInterface  {


    public function matches(Route $route, Request $request)

    {

        $path = $request->getPathInfo();

        return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));

    }

}

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


public function boot() {

    Route::$validators = array_merge(Route::getValidators(), [ new MyUriValidator ]);

}


查看完整回答
反对 回复 2023-07-01
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信