2012-08-03 167 views
49

我刚开始学习Laravel框架,并且遇到了路由问题。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'); 
    } 
} 

我创建了一个应用程序/视图/用户/视图文件名为的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)时,但是当我尝试去我塞康d路线与http://localhost/mysite/public/user我收到404 Not Found错误。为什么会发生这种情况?

+2

你的'.htaccess'如何? – Michelle 2012-08-03 07:48:29

+0

.htaccess是未修改的,就像它是开箱即用的。 – JasonMortonNZ 2012-08-03 07:51:35

+0

看来WAMP是个问题。现在已经改为XAMPP,并且一切都很好,并且应该如此。我是否应该自问这个问题,解释WAMP是个问题? – JasonMortonNZ 2012-08-04 02:48:49

回答

20

您是否尝试过加入给你的路线文件,而不是Route::get('user', "[email protected]")

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

我看到您使用的是$restful,在这种情况下,您可以将Route设置为Route::any('user', '[email protected]')。这将同时处理POSTGET,而不是单独写出它们。

+0

由于问题依然存在,我将从WAMP更改为XAMPP。在XAMPP服务器上启动一个新项目并使用'@'符号代替'。'后它现在工作得很好。 – JasonMortonNZ 2012-08-04 02:46:19

+1

它适用于WAMP,您只需启用rewrite_module即可。请参阅下面的@ Muvera的评论。 – ajon 2015-01-03 18:21:18

+2

我知道这是一个旧的答案,但我有一个类似的问题:一条新的路线被添加,并没有工作! (404)。我只需要清除缓存的路线!使用php工匠路线:清除 – trainoasis 2015-12-22 08:27:15

5

路线

使用它们来定义不是由控制器进行管理的具体路线。

控制器

当你想使用传统的MVC架构

解决您的问题

,除非你想有一个特定的“命名你不注册控制器所使用的路线使用它们'控制器行动的路线。

而不是为你的控制器操作的路线,只需注册您的控制器:

Route::controller('user'); 

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

您也可以注册的所有控制器都一气呵成:

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

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

+0

等等,什么? Laravel需要短标签吗? – bishop 2014-10-24 13:29:06

25

您是否尝试过检查

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

是工作?如果是这样,请确保所有路径的文件夹都没有任何大写字母。我遇到了同样的情况,并且将信件转换为小写字母。

+0

谢谢。我正在一步一步浏览Laravel的书(Laravel Starter),并被封锁到封闭(第13页)。这为我解决了这个问题。 – 2013-02-05 19:33:26

+0

这解决了我的问题。我在破解laravel的htaccess的apache文件夹的根目录下有一个.htaccess文件。 – Maarten00 2013-12-11 10:51:28

+0

这解决了我的其他问题。使用Laravel生成页面,Angular调用REST,在Windows上调用'api/branches'工作,但在linux上,我必须更改这个URL,如:'index.php/api/branches' 任何解决方法这有相同的网址? – miroslavign 2015-09-23 09:57:38

62

使用WAMP点击WAMP的图标 - > apache->的Apache模块 - >滚动和检查rewrite_module 重新启动一个 的LoadModule rewrite_module

注意,服务器应用程序会自动为你一旦启用 “rewrite_module” 重新开始

+3

谢谢解决了我的问题! – funerr 2013-02-06 17:39:56

+0

非常感谢,从昨天开始就试图对这个问题进行排序 – Moe 2013-11-24 12:29:20

+2

每次我在计算机上安装/重新安装WAMP和Laravel时,这似乎都发生在我身上。这始终是问题。希望它会最终承诺内存;) – Zuko 2013-12-13 07:53:59

3

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

例如:

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

你把这个放在哪里? – Goddard 2015-02-06 22:42:18

6

我使用EasyPHP时遇到了同样的问题。发现我必须在httpd.conf<Directory>区块中指定AllowOverride All。没有这个,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> 
+0

我在Debian GNU/Linux 7.6上发现,除了为apache2启用模块(a2enmod rewrite)之外,此响应还提供了所需的部分内容。 – 2014-09-08 19:16:32

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

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

变化上面

你必须在年底前使用 '/'(住宅/默认)您路线

2

好吧,等一天之后,我在这个问题上抨击我一下......我起床并做了我昨天应该做的事情,并且D咕what着发生了什么事!

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是需要进行替换的位置)必须应用“重写规则”。

谢天谢地,laravel在正确的.htaccess文件中提供了正确的重写规则,就在您的应用的public文件夹中。问题是,'.htaccess'文件中的代码不能用WAMP配置的方式工作。这个SEEMS的原因是muvera在这个线程顶部提出的问题 - 在RewriteRule的东西可以工作之前,需要由Apache加载rewrite_module代码。这是有道理的。

部分是没有意义的:只需stoppingrestarting Apache服务不会拿起WAMP用你的RewriteRule做正确的事情所必须的改变 - 我知道,我尝试了很多次!

什么工作:使muvera建议的更改(请参阅线程顶部)加载正确的模块。然后,重置您的整个Windows会话,从而将Apache从内存中彻底删除。重新启动(重新加载)WAMP和VOILA!修复工程,正确的RewriteRule应用,yada,yada;我从此过上幸福快乐的生活。

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

54

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

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

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

+0

这解决了这个问题,我在一个从puphpet下载的流浪机器上。 – winkbrace 2015-02-04 22:08:26

+3

谢谢,你是救命恩人。 – 2015-05-30 15:12:42

+3

非常感谢,我浪费了4个小时才找到这个 – 2015-08-18 10:04:18

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

只是运行同样的错误。

composer dump-autoload 
5

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

+2

您发布了与8个问题完全相同的答案。如果你认为它们是重复的,你应该将它们标记为这样,而不是为每个答案发布答案​​。 – Jaap 2016-12-22 19:45:18

0

的路线不工作的主要问题是存在的MacOS mod_rewrite.so模块,Linux的不阿帕奇的httpd.conf文件中启用配置,所以可以.htaccess工作。 我已经通过取消对线解决了这个:

的LoadModule rewrite_module的libexec/apache2的/ mod_rewrite.so

从上方线httpdf.conf卸下#。然后它会起作用。请享用!

0

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