Laravel 中的路由问题
Posted
技术标签:
【中文标题】Laravel 中的路由问题【英文标题】:Routing issue in Laravel 【发布时间】:2014-09-29 17:27:05 【问题描述】:我正在尝试在 Laravel (4.2) 中实现登录系统,但我的一些路由抛出 404 错误。例如,我用于验证用户身份并将其登录的路线工作得很好。然后当我点击注销时,Laravel 将我路由回 localhost/logout,而它应该是 localhost/laravel/public/logout。当我手动输入该 URL 时,它会正常注销并重定向回登录页面,就像它应该做的那样。不太确定出了什么问题,因为我的 httpd.conf 有 AllowOverride All 并且正在加载 mod_rewrite。如果有什么不同,我会在 Ubuntu 上使用最新版本的 XAMPP。
在 UsersController.php 中:
public function logout()
if(Auth::check())
Auth::logout();
return Redirect::route('login');
routes.php:
Route::get('/logout', array('as' => 'logout', 'uses' => 'UsersController@logout'));
在我看来是这样的:
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
@if (Auth::check())
<li><a href="/logout">Log Out</a></li>
<li><a href="/profile"> Auth::user()->username </a></li>
@else
<li><a href="/login">Login</a></li>
<li><a href="/register">Sign Up</a></li>
@endif
</ul>
编辑我的登录路径:
Route::get('login', array('as' => 'login', 'uses' => 'UsersController@login'));
只加载登录视图:
public function login()
return View::make('users.login');
编辑 2 httpd.conf
Alias /bitnami/ "/opt/lampp/apache2/htdocs/"
Alias /bitnami "/opt/lampp/apache2/htdocs"
<Directory "/opt/lampp/apache2/htdocs/laravel/public">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
EDIT 3 Razor 在 cmets 中的建议解决了问题。感谢大家的帮助。
【问题讨论】:
是您的Redirect::route('login')
命名路由。你没有显示你的那部分代码
@Kombian 更新了问题以包含登录路径。
尝试通过在目录定义上方添加DocumentRoot /opt/lampp/apache2/htdocs/laravel/public
来明确设置文档根目录。
我试过了,在尝试重启 apache 时,XAMPP 无法关闭 apache 实例(apachectl 返回 1 个错误),所以我不得不撤消对 httpd.conf 的更改以使其正常重启。不幸的是,这个建议没有奏效。
link_to_route('logout', 'Log Out');
怎么样?
【参考方案1】:
改变这个:
Route::get('/logout', array('as' => 'logout', 'uses' => 'UsersController@logout'));
到这里:
Route::get('logout', array('as' => 'logout', 'uses' => 'UsersController@logout'));
没有前导/
。
【讨论】:
不幸的是同样的问题。 您的文档根目录是否正确设置为localhost/laravel/public
?【参考方案2】:
尝试使用href="logout"
而不是href="/logout"
,它应该可以工作。但我推荐使用Url helpers:
link_to_route('logout', 'Log Out');
link_to('/login', 'Login');
<li><a href="URL::to('/register')">Sign Up</a></li>
【讨论】:
在 Laravel 中,定义路由时正斜杠的含义是什么?我在有和没有它们的情况下进行了测试。应用程序在没有斜线的情况下工作得很好,所以我决定放弃它们。以上是关于Laravel 中的路由问题的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 中的控制台路由是啥?它是如何工作的? [关闭]
Laravel 5.3 登录路由 - RouteCollection.php 中的 NotFoundHttpException