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

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


波斯汪
浏览 119回答 1
1回答

慕桂英4014372

需要明确的是,这不是一个错误。错误意味着这是框架开发人员明确表示不应该发生但实际上发生的事情。这主要是一种未定义的行为。发生这种情况的原因是请求如何确定当前路径:在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 ]);}
打开App,查看更多内容
随时随地看视频慕课网APP