88

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

我在 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 错误。为什么会发生这种情况?

4

19 回答 19

132

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

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

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

于 2015-01-19T18:43:59.777 回答
63

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

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

于 2013-01-23T22:33:38.823 回答
37

你有没有试过检查

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

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

于 2012-12-26T19:30:50.203 回答
25

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

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

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

于 2012-08-03T15:38:42.190 回答
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>
于 2013-12-21T14:27:19.157 回答
6

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

于 2016-12-22T18:17:03.787 回答
5

路线

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

控制器

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

解决您的问题

除非您想要一个特定的“命名”路由用于控制器操作,否则您不会将控制器注册为路由。

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

Route::controller('user');

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

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

Route::controller(Controller::detect());
于 2012-08-03T14:57:27.547 回答
3

不要忘记你的“ RewriteBasepublic/.htaccess

例如 :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
于 2013-05-31T23:25:27.250 回答
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是需要进行替换的地方)必须应用“重写规则”。

值得庆幸的是,laravel.htaccess在您应用程序public文件夹中的一个方便文件中提供了正确的重写规则。问题是,“.htaccess”文件中的代码不适用于开箱即用的 WAMP 配置方式。这个 SEEMS 的原因是 muvera 在该线程顶部提出的问题 - rewrite_module 代码需要由 Apache 加载,然后RewriteRule才能工作。哎呀,这是有道理的。

没有意义的部分:简单地说stoppingrestartingApache 服务不会接受 WAMP 所需的更改,以便使用您的 RewriteRule 做正确的事情——我知道,我尝试了很多次!

工作原理:进行 muvera 建议的更改(请参阅线程顶部)以加载正确的模块。然后,重置整个 Windows 会话,从而将 Apache 完全耗尽内存。重新启动(重新加载)WAMP,瞧!修复有效,应用了正确的 RewriteRule,yada,yada;我从此过着幸福的生活。

好消息是:我现在对 , 和 files 有了更多.htaccessRewriteRule了解httpd.conf。有一个很好的(性能)论据可以将逻辑从您的应用程序public .htaccess文件中移出,并将其放入Directory ...您的 Apache 'bin' 文件夹 BTW 中的 httpd.conf 的一部分(特别是如果您有权访问该文件夹)。

于 2014-03-15T18:31:55.530 回答
3

只需在您的终端中运行。

php artisan route:clear
于 2021-07-08T09:41:04.900 回答
0

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

于 2012-09-30T00:06:00.467 回答
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');
});

您必须在路线的末尾使用 '/'(home/default)

于 2013-12-27T10:56:28.673 回答
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 命令更改请参阅我之前遇到相同错误的文档

于 2015-03-29T17:43:29.413 回答
0

只需在您的终端中运行。

 composer dump-autoload
于 2016-09-02T11:50:54.477 回答
0

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

# LoadModule rewrite_module libexec/apache2/mod_rewrite.so

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

于 2017-08-01T09:15:45.487 回答
0

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

于 2017-08-28T18:12:56.143 回答
0

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

composer dump-autoload

并且仍然发现您的一些重要文件丢失了,所以去这里查看整个过程

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

于 2018-12-01T07:30:55.897 回答
0

如果您通过 Homestead 使用 Vagrant,则安装共享文件夹可能会出错。看起来 Vagrant 从该文件夹中获取您的文件并在启动时换出实际在主机上的文件,因此如果出现错误,您实际上是在尝试从您第一次创建 Laravel 安装时访问它(其中这就是为什么你只得到“家”——这是在安装过程中生成的)。

您可以通过 ssh 进入您的 vm 并检查 routes/web.php 文件以查看它是否真的是您的文件,从而轻松地检查这一点。如果不是,退出和vagrant halt, vagrant up,并在启动时查找错误。

于 2018-12-17T23:46:28.620 回答
0
  1. 设置 .env 文件
  2. 配置index.html
  3. 确保你有.htaccess
  4. sudo service apache2 restart

很可能是由于缓存问题

于 2020-06-08T04:34:34.117 回答