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 7 - 嵌套资源路由中的范围问题

laravel中的路由冲突

Laravel - PHPUnit 中的伪造路由

Laravel 中的控制台路由是啥?它是如何工作的? [关闭]

Laravel 中的路由顺序很重要

Laravel 5.3 登录路由 - RouteCollection.php 中的 NotFoundHttpException