用户在动态路由中键入/时出现NotFoundHttpException错误

时间:2017-01-11 14:10:39

标签: php laravel

在Laravel 5.3中,我的路线(web.php)文件出现问题。当用户将变量$url设置为" www.website.com"一切都很好,但如果他输入" http:// www.website.com"该参数正被' /'并显示错误。如何克服这个问题?

Route::get('/result/{url}', function($url){
  return view('result', ['url'=>$url]);
});

2 个答案:

答案 0 :(得分:1)

经过测试,Laravel似乎对网址进行解码并将%2f视为/,从而导致您获得404错误。

解决方法是更改​​路径定义以允许参数中的所有字符。以下是您需要更改的内容:

Route::get('/result/{url}', function($url){
  return view('result', ['url'=>$url]);
})->where('url', '.*'); // allows all chars in the `url` parameter

.*约束将允许此参数接受任何字符。此方法的缺点是此参数需要是最后一个,因为它会占用所有正斜杠,并且您将无法分隔任何其他路径参数。

答案 1 :(得分:0)

由于/中的http://www.website.com分隔了网址,因此您无法将其用作网址中的资源。你可以通过创建爆炸url:

的函数从url中删除http://
function explodeURLIfNeeded($url) {
    $url = end(explode('/', $url));
    return $url;
}