接受Laravel 4路由中的编码URL

时间:2013-04-06 13:57:14

标签: routes laravel laravel-4

我正在使用Laravel 4 Beta 5开发一个网站,我正在尝试将编码的URL传递给路由器。问题是,编码的URL中有百分比等,因此它被Laravel阻止。该URL使用Javascript函数encodeURIComponent()进行编码。

有没有办法覆盖Laravel所以我可以在路线中使用任何角色?

这是我目前的代码:

Route::get('add/{encoded_url}', function($encoded_url)
{
    return 'The URL is: '.rawurldecode($encoded_url);
});

我试图通过追加where('encoded_url', '*reg-ex*');来覆盖Laravel,但它不起作用(我对reg-ex,btw不太好。)

3 个答案:

答案 0 :(得分:12)

给这个正则表达式一个,它将匹配任何字符 ...

Route::get('add/{encoded_url}', function($encoded_url)
{
    return 'The URL is: '.rawurldecode($encoded_url);
})->where('encoded_url', '.*');

答案 1 :(得分:2)

Phill的答案是正确的,但我还必须对我的apache设置进行更改才能使其正常工作。

我必须将以下内容添加到我的httpd.conf文件中:

AllowEncodedSlashes NoDecode

如果您看到的是Apache 404找不到的页面而不是Laravel NotFoundHttpException错误页面,那么您将需要这个。

非常明显的解释,但没有这个Apache就是解码编码的斜杠以便

http://localhost/add/http%2F%2Fwww.google.co.uk

正被路由到

http://localhost/add/http://www.google.co.uk

答案 2 :(得分:2)

由于我认为是一个bug,

urlencoded斜杠在Laravel中不起作用。

https://github.com/laravel/framework/pull/4323

此拉取请求将解决该错误。