Laravel:带有编码字符的URL会产生404异常

时间:2016-04-18 05:29:02

标签: php laravel laravel-4 urlencode

我正在开展基于laravel 4.2的项目,我面临一个奇怪的问题。

问题

我有一个URL,例如, http://example.com/events/eventname/registration#get_register

以上网址完美无缺,但是当特殊字符编码后,我最终得到了以下网址

http://example.com/events/eventname/registration%23get_register

这个编码的网址给了我laravel的404例外。

详细信息:

当我通过Skype和iOS版Skype编码URL将我的项目链接发送给同事时,我注意到了这个问题。因此,当我的同事从Skype打开该链接时,他得到了例外。

更新

我的路线代码

//Free Registration
Route::any('events/{event_url}/registration', 'MyController@registration_step1');

1 个答案:

答案 0 :(得分:1)

主要问题是url中的哈希标记不会发送到服务器。它们由浏览器使用。因此,当您使用http://example/#hash时,服务器只会看到http://example/。当哈希使用%23进行编码时,服务器会获得完整的URL。如果您希望laravel的路由识别出%23的网址,那么您应该匹配并处理它或匹配它并重定向。例如......

Route::get('events/{event_url}/registration/*', 'MyController@registration_step1');

...或

Route::get('events/{event_url}/registration{hash?}', 'MyController@registration_step1');

取决于您是否需要捕获参数。