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

时间:2012-08-03 07:42:28

标签: php laravel routing laravel-routing laravel-3

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

唯一有效的路线是开箱即用的Laravel附加的默认主路线。

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

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

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

我在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');
});

第一条路线在我的网络浏览器中访问根(http://localhost/mysite/public)时工作正常,但当我尝试使用http://localhost/mysite/public/user转到第二条路线时,我收到404 Not Found错误。为什么会发生这种情况?

19 个答案:

答案 0 :(得分:90)

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

  1. 在apache服务器上启用mod_rewrite:sudo a2enmod rewrite
  2. 编辑 /etc/apache2/apache2.conf ,更改/ var / www目录(我的主文档根目录)的“AllowOverride”指令:AllowOverride All
  3. 然后重启Apache服务器:service apache2 restart

答案 1 :(得分:63)

使用WAMP点击wamp icon - > apache-> apache modules->滚动并检查rewrite_module 重启一下 LoadModule rewrite_module

注意,启用“rewrite_module”

后,服务器应用程序会自动重启

答案 2 :(得分:32)

您是否尝试过检查

http://localhost/mysite/public/index.php/user 

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

答案 3 :(得分:22)

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

@之前的文字,在这种情况下为user,会将页面定向到用户控制器和@之后的index user ,将脚本指向public function get_index()函数$restful

我发现您正在使用Route,在这种情况下,您可以将Route::any('user', 'user@index')设置为POST。这将处理GET和{{1}},而不是分别编写它们。

答案 4 :(得分:8)

使用EasyPHP我遇到了同样的问题。发现我必须在AllowOverride All的{​​{1}}块中指定 <Directory> 。如果没有这个,Apache有时会忽略您的httpd.conf

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

.htaccess

答案 5 :(得分:6)

您可以尝试将root/public/.htaccess移至root/.htaccess,它应该可以正常工作

答案 6 :(得分:5)

<强>路线

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

<强>控制器

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

解决您的问题

您不会将控制器注册为路由,除非您需要特定的“命名”路由来执行控制器操作。

不要为控制器操作创建路径,只需注册控制器:

Route::controller('user');

现在您的控制器已注册,您可以导航至http://localhost/mysite/public/user并运行get_index

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

Route::controller(Controller::detect());

答案 7 :(得分:3)

不要忘记RewriteBase中的“public/.htaccess”:

例如:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public

答案 8 :(得分:3)

好的,所以经过一天多一点关注这个问题之后......我站起来做了我昨天应该做的事情,然后调试了发生的事情!

Laravel在这里尝试做的是将文件index.php插入路径前面的路径前面。例如,如果你指定了Route::get('/account/create', ...,并在浏览器上执行你的应用程序localhost/laravel/authenticate/public/account/create,那么laravel想要执行localhost/authenticate/public/index.php/account/create,但要做到这一点...... Apache需要通过/wamp/www/laravel/laravel/authentication/public查看请求(您的路径可能会有所不同,具体取决于您的laravel应用程序的实际安装位​​置,但是需要进行替换的结尾public)必须具有&#39;重写规则&#39;应用

幸运的是,laravel在应用程序.htaccess文件夹中的方便的public文件中提供了正确的重写规则。问题是,&#39; .htaccess&#39;中的代码。文件无法使用开箱即用的WAMP配置方式。这个SEEMS的原因是muvera在这个线程的顶部提出的问题 - 在RewriteRule内容工作之前,需要由Apache加载rewrite_module代码。哎这是有道理的。

DOESN&#39; T有意义的部分:简单stoppingrestarting Apache服务不会接受WAMP使用RewriteRule做正确事情所需的更改 - 我知道,我试过很多次了!

做什么工作:进行muvera建议的更改(参见主题的顶部)以加载正确的模块。然后,重置整个Windows会话,从而完全将Apache转储出内存。重启(重新加载)WAMP和VOILA!修复工作,应用正确的RewriteRule,yada,yada;我从此过上幸福的生活。

所有这一切的好消息:我现在对.htaccessRewriteRulehttpd.conf文件了解得更多。从应用程序的public .htaccess文件移动逻辑并将其放入Apache中httpd.conf的Directory ...部分,有一个很好的(性能)参数&#39;仓&#39;文件夹BTW(特别是如果您有权访问该文件夹)。

答案 9 :(得分:0)

尝试在php.ini中启用短php标签。 WAMP通常会关闭它们,laravel需要它们。

答案 10 :(得分:0)

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

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

更改为

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

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

您必须在路线的末尾使用'/'(主页/默认值)

答案 11 :(得分:0)

你必须使用Laravel 5命令

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

和routes.php

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

  Route::get('user', function()
  {
  return view('user.index');
  });

对于视图和控制器的Laravel 5命令更改,请参阅

之前我遇到相同错误的文档

答案 12 :(得分:0)

只需在您的终端中运行。

 composer dump-autoload

答案 13 :(得分:0)

路由无法正常运行的主要问题是macos中有mod_rewrite.so模块,在apache配置的httpd.conf文件中没有启用linux,因此.htaccess可以工作。 我通过取消注释该行来解决这个问题:

LoadModule rewrite_module libexec / apache2 / mod_rewrite.so

从上面的httpdf.conf行中删除#。然后它会工作。享受!

答案 14 :(得分:0)

我认为你已经删除了laravel公共文件夹中的默认.htaccess文件。上传文件,它应该解决你的问题。

答案 15 :(得分:0)

具有自动加载依赖项的简单命令

composer dump-autoload

仍然会丢失一些重要文件,因此请转到此处查看整个过程

https://codingexpertise.blogspot.com/2018/11/laravel-new.html

答案 16 :(得分:0)

如果通过Homestead使用Vagrant,则可能是安装共享文件夹时出错。看起来Vagrant会从该文件夹中取出文件,并在启动时交换掉主机上实际存在的文件,因此,如果发生错误,则实际上是在尝试从首次安装时访问Laravel安装(这就是为什么您只会得到“ home”(这是在安装过程中生成的)的原因。

您可以通过将ssh放入vm并检查route / web.php文件来查看它是否实际上是您的文件,从而轻松地检查它。如果不是,请退出,然后vagrant haltvagrant up退出,并在引导时查找错误。

答案 17 :(得分:0)

  1. 设置.env文件
  2. 配置index.html
  3. 确保您拥有.htaccess
  4. sudo service apache2 restart

最有可能是由于缓存问题

答案 18 :(得分:0)

只需在终端中运行即可。

php artisan route:clear