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

Laravel: URLs with encoded characters generate 404 exception

我正在做一个基于 laravel 4.2 的项目,我遇到了一个奇怪的问题。

问题

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

以上 URL 完美运行,但是当对特殊字符进行编码时,我最终得到以下 URL

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

这个编码的 URL 给了我 laravel 的 404 异常。

详情:

当我通过 Skype 将我的项目 link 发送给同事并且 iOS 版本的 Skype 在消息中编码 URLs 时,我注意到了这个问题。因此,当我的同事从 Skype 打开 link 时,他遇到了异常。

更新

我的路线代码

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

主要问题是 url 中的散列标签未发送到服务器。它们由浏览器使用。所以当你使用http://example/#hash时,服务器只会看到http://example/。当散列用 %23 编码时,服务器确实获得了完整的 url。如果你想让 laravel 的路由识别 url 和 %23 那么你应该匹配它并处理它或者匹配它并重定向。例如...

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

或...

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

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