3

我正在用 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);
});

我试图通过附加来覆盖 Laravel where('encoded_url', '*reg-ex*');,但它没有用(我对 reg-ex 不是很好,顺便说一句)。

4

3 回答 3

14

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

Route::get('add/{encoded_url}', function($encoded_url)
{
    return 'The URL is: '.rawurldecode($encoded_url);
})->where('encoded_url', '.*');
于 2013-04-11T11:54:09.177 回答
2

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

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

AllowEncodedSlashes NoDecode

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

很明显的解释,但没有这个 Apache 正在解码编码的斜杠,以便

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

被路由到

http://localhost/add/http://www.google.co.uk
于 2013-08-24T10:27:47.317 回答
2

由于我认为是一个错误,urlencoded 斜杠在 Laravel 中不起作用。

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

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

于 2014-05-04T01:41:27.817 回答