我的路线正在返回404,我该如何修复它们?

Jas*_*nNZ 73 php routing laravel laravel-3 laravel-routing

我刚刚开始学习Laravel框架,我遇到了路由问题.

唯一有效的路线是开箱即用的Laravel附加的默认本地路由.

我在Windows上使用WAMP,它使用PHP 5.4.3和Apache 2.2.22,我也启用了mod_rewrite,并从application.php配置文件中删除了'index.php'以留下空字符串.

我创建了一个名为User的新控制器:

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}
Run Code Online (Sandbox Code Playgroud)

我在application/views/user /中创建了一个视图文件,名为index.php,带有一些基本的HTML代码,在routes.php中我添加了以下内容:

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});
Run Code Online (Sandbox Code Playgroud)

http://localhost/mysite/public在我的Web浏览器中访问root()时,第一条路径工作正常,但是当我尝试转到第二条路径时,http://localhost/mysite/public/user我收到404 Not Found错误.为什么会这样?

小智 99

在我的Ubuntu LAMP安装中,我通过以下2个更改解决了这个问题.

  1. 在apache服务器上启用mod_rewrite : sudo a2enmod rewrite.
  2. 编辑/etc/apache2/apache2.conf,更改/ var/www目录的"AllowOverride"指令(这是我的主文档根目录):AllowOverride All

然后重启Apache服务器: service apache2 restart

  • 谢谢,你是救命的人. (4认同)
  • 非常感谢,我浪费了4个小时来找到这个 (3认同)
  • @McSonk,问题可能是针对 Windows 的。此替代解决方案适用于 Ubuntu。谢谢大佬。 (2认同)

小智 63

使用WAMP单击wamp图标 - > apache-> apache modules-> scroll并检查rewrite_module重新启动LoadModule rewrite_module

注意,一旦启用"rewrite_module",服务器应用程序就会自动重启

  • 每次我在计算机上安装/重新安装WAMP和Laravel时,这似乎都会发生在我身上.这始终是个问题.希望它最终将致力于记忆;) (2认同)

小智 35

你有没有试过检查一下

http://localhost/mysite/public/index.php/user 
Run Code Online (Sandbox Code Playgroud)

工作?如果是这样,那么请确保所有路径的文件夹没有任何大写字母.我有同样的情况,并将信件转换为小写有帮助.


Pap*_*urf 22

您是否尝试过将其添加到路径文件中Route::get('user', "user@index")

之前的一段文字@,user在这种情况下,直接将网页的用户控制器和之后的一段文字@,index将直接脚本的user功能public function get_index().

我看到你正在使用$restful,在这种情况下你可以设置你RouteRoute::any('user', 'user@index').这将同时处理POSTGET,而不是单独写他们两个.

  • 我知道这是一个陈旧的答案,但我遇到了类似的问题:添加了一条新路线并且无效!(404).我只需要清除缓存的路线!使用php artisan route:clear (3认同)

Sim*_*ast 8

我使用EasyPHP遇到了同样的问题.发现我必须AllowOverride All在我的<Directory>块中指定httpd.conf.没有这个,Apache有时会忽略你的.htaccess.

我最终看起来像这样......

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>
Run Code Online (Sandbox Code Playgroud)


小智 8

只需在终端中运行即可。

php artisan route:clear
Run Code Online (Sandbox Code Playgroud)


Was*_* A. 6

你可以尝试移动root/public/.htaccessroot/.htaccess它应该工作

  • 并且,此答案不起作用。 (4认同)
  • 你发布了8个问题的完全相同的答案.如果您认为它们是重复的,您应该将它们标记为重复,而不是对每个标记进行回答. (3认同)

Dav*_*ker 5

路线

使用它们来定义不由控制器管理的特定路由.

控制器

当您想使用传统的MVC架构时,请使用它们

解决您的问题

除非您想要控制器操作的特定"命名"路由,否则不会将控制器注册为路由.

而不是为您的控制器操作创建路由,只需注册您的控制器:

Route::controller('user');
Run Code Online (Sandbox Code Playgroud)

现在你的控制器被注册,您可以导航到http://localhost/mysite/public/user你的get_index将会运行.

您还可以一次注册所有控制器:

Route::controller(Controller::detect());
Run Code Online (Sandbox Code Playgroud)