我正在开展一个项目,并且在登录后我正在努力重定向到预定的位置。 问题是Laravel不包括Vues路线(#/ ......之后的任何东西)所以它总是将我重定向到' domain.com /'
我正在使用laravel路由仅用于登录' '注销'和' /'应用程序的其余部分是使用vue路由的单页。
应用的用户在需要采取措施时会收到通知电子邮件。这些电子邮件包含指向需要其操作的请求的链接(例如domain.com/#/request/3413)。当然,他们需要登录才能访问,以便通过laravel(domain.com/login#/request/3413)重定向到登录页面
成功登录后,我尝试使用
重定向它们return redirect()->intended('/');
但它会将它们重定向到' domain.com /'而不是' domain.com /#/ request / 3413'
有没有办法让laravel在重定向中包含vues路由?
非常感谢!
答案 0 :(得分:2)
所以经过一些令人难以忍受的研究后,我发现#之后的任何内容都是由浏览器处理的,这意味着服务器没有看到它,所以你无法在PHP代码中访问它。我发现感谢这个帖子:Getting FULL URL with #tag
我不确定请求的那部分是否甚至没有发送到服务器,但它似乎是这样,对我来说甚至是合乎逻辑的,它会是如此。
所以为了解决这个问题,我通过电子邮件将发送给用户的链接更改为
domain.com/?request=3413
这样我就可以在我的PHP代码中访问它,并在成功登录后将重定向链接放在一起。
答案 1 :(得分:0)
您可以通过启用History Mode来删除Vue Router中URL中的#,如下所示:
const router = new VueRouter({
mode: 'history',
routes: [...]
})
您需要将所有请求定向到应用程序所在的位置。如果您的后端是Laravel,则可以在route / web.php文件中定义全部路由
Route::get('/{any}', 'SpaController@index')->where('any', '.*');
需要注意的是,服务器将不再为找不到的路径返回404,因此,如果找不到路径,则必须创建一个NotFoundComponent才能显示在Vue应用程序上。
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '*', component: NotFoundComponent }
]
})