我的路线返回了404,我该如何解决?


81

我刚刚开始学习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');
    }
}

我已经使用一些基本的HTML代码在application / views / user /中创建了一个名为index.php的视图文件,并在route.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错误。为什么会这样呢?


.htaccess是未修改的,就像开箱即用一样。
2012年

似乎WAMP是问题所在。现在已更改为XAMPP,一切正常,应该正常运行。我是否应该回答这个问题,以解释WAMP是问题?
JasonMortonNZ 2012年

@AquilaSolutions是的,您可以。这样每个人都会清楚地看到您的问题现在已经解决。
Jocelyn 2012年

Answers:


25

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

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

我看到您正在使用$restful,在这种情况下,您可以将设置RouteRoute::any('user', 'user@index')。这将处理POSTGET,而不是将它们分别写出。


我从WAMP更改为XAMPP,因为问题仍然存在。在XAMPP服务器上启动一个新项目并使用'@'符号代替'。'之后。现在效果很好。
JasonMortonNZ

1
它可以与WAMP一起正常工作,您只需要启用rewrite_module。请参阅下面的@Muvera评论。
2015年

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

118

在我的Ubuntu LAMP安装上,我通过以下两个更改解决了此问题。

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

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


这为我从puphpet下载的无业游民的计算机上解决了这个问题。
winkbrace

5
谢谢,您是救命的人。
哈桑·穆尔塔扎

3
非常感谢,我已经花了4个小时才找到它
Anshul Mishra 2015年

为我在MacOS High Sierra 10.13.3上使用Laravel-5.4
Yevgeniy Afanasyev

2
@McSonk,可能是Windows的问题。此替代解决方案适用于Ubuntu。谢谢老兄。
Fendi Septiawan

63

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

注意,启用“ rewrite_module”后,服务器应用程序将自动为您重新启动


感谢很多人,从昨天开始一直在努力解决这个问题
Moe 2013年

2
每当我在计算机上安装/重新安装WAMP和Laravel时,这似乎都会发生。这始终是问题。希望它将最终致力于记忆;)
Kenmore

在Ubuntu 14.04下,“ sudo a2enmod rewrite”然后“ sudo service apache2 restart”起作用。
nspo 2014年

for linux系统启用重新sudo a2enmod rewrite启动后的 重写模块sudo service apache2 restart
aimme '16

35

您是否尝试检查是否

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

在工作吗?如果是这样,请确保路径的所有文件夹都没有大写字母。我遇到了同样的情况,将字母转换为小写字母很有帮助。


谢谢。我正在逐步阅读Laravel书(Laravel Starter),并被困于路由到闭包(第13页)。这为我解决了这个问题。
史蒂夫·林赛

这解决了我的问题。我的apache文件夹的根目录中有一个.htaccess,它破坏了laravel的htaccess。
Maarten00 2013年

这解决了我遇到的其他问题。使用Laravel生成页面,使用Angular调用REST,在Windows上可以使用该调用api/branches,但是在linux上,我必须更改此url,例如:index.php/api/branches可以使用相同的URL来解决此问题?
miroslavign 2015年

我从没想过它区分大小写
ClearBoth

而是将.htaccess文件从public /文件夹放置到项目的根目录,然后可以通过http://localhost/mysite/user
Rohan Khude

9

我在使用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>

我在Debian GNU / Linux 7.6上发现,此响应除了为apache2启用模块(a2enmod重写)外,还提供了所需的部分内容。
凯文·布克斯

6

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


4
您对8个问题发布了完全相同的答案。如果您认为它们是重复项,则应将其标记为重复项,而不要对每个问题都给出答案。
Jaap 2013年

5

路线

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

控制器

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

解决您的问题

除非您要为控制器操作指定特定的“命名”路由,否则不要将控制器注册为路由。

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

Route::controller('user');

现在您的控制器已注册,您可以导航到http://localhost/mysite/public/userget_index将运行它。

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

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


3

好吧,所以,在这个问题上花了一天多的精力之后……我起身去做昨天应该做的事情,并对发生的事情进行了调试!

Laravel在这里尝试做的是将文件插入到index.php作为Route给出的路径的前面。例如,如果您指定aRoute::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是替换发生的地方)必须应用“ RewriteRule”。

幸运的是,laravel.htaccess在应用程序public文件夹中的方便文件中提供了正确的重写规则。问题是,'。htaccess'文件中的代码与开箱即用地配置WAMP的方式不兼容。该SEEMS的原因是该线程顶部的muvera建议的问题-Apache必须先加载rewrite_module代码,然后这些RewriteRule东西才能起作用。哎呀,这很有意义。

毫无意义的部分:简单地stoppingrestartingApache服务将无法获得WAMP对您的RewriteRule执行正确操作所需的更改-我知道,我已经尝试了很多次!

起作用的方法:进行muvera建议的更改(请参见线程顶部)以加载正确的模块。然后,重置整个Windows会话,从而将Apache完全转出内存。重新启动(重新加载)WAMP,然后VOILA!修复成功后,将应用正确的RewriteRule,yada,yada;我从此过着幸福的生活。

我知道了很多有关:好消息了这一切.htaccessRewriteRulehttpd.conf现在的文件。有一个很好的(性能)参数可以将逻辑从应用程序的public .htaccess文件中移出,并将其放入Directory ...Apache“ bin”文件夹BTW中的httpd.conf的一部分中(特别是如果您有权访问该文件夹)。


0

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


等一下 Laravel需要短标签吗?
主教

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

您必须在路线的末尾使用'/'(家庭/默认)


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视图和控制器的命令更改请参阅文档,我之前遇到过相同的错误



0

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



0

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

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


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

最有可能是由于缓存问题


0

路由不起作用的主要问题是在macos中有mod_rewrite.so模块,Apache配置的httpd.conf文件中未启用linux,因此.htaccess可以工作。我已经通过取消注释行解决了这个问题:

# LoadModule rewrite_module libexec/apache2/mod_rewrite.so

#从的上述行中删除httpdf.conf。然后它将起作用。
请享用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.