【问题标题】:My Routes are Returning a 404, How can I Fix Them?我的路线返回 404,我该如何修复它们?
【发布时间】:2012-08-01 05:53:40
【问题描述】:

我刚开始学习 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 错误。为什么会发生这种情况?

【问题讨论】:

  • .htaccess 未经修改,就像开箱即用一样。
  • 看来 WAMP 是问题所在。现在已更改为 XAMPP,一切正常,而且应该如此。我应该自己回答这个问题,解释 WAMP 是问题所在吗?
  • @AquilaSolutions 是的,你可以。所以每个人都会清楚地看到你的问题现在已经解决了。

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


【解决方案1】:

路线

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

控制器

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

您的问题的解决方案

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

与其为您的控制器操作创建路由,不如注册您的控制器:

Route::controller('user');

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我从 WAMP 更改为 XAMPP,因为问题仍然存在。在 XAMPP 服务器上启动一个新项目并使用“@”符号而不是“。”之后现在效果很好。
    • 它在 WAMP 上运行良好,您只需要启用 rewrite_module。请参阅下面的@Muvera 评论。
    • 我知道这是一个旧答案,但我遇到了类似的问题:添加了一条新路线但没有用! (404)。我只需要清除缓存的路线!使用 php artisan route:clear
    【解决方案3】:

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

    【讨论】:

    • 等等,什么? Laravel 需要短标签吗?
    【解决方案4】:

    你有没有试过检查

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

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

    【讨论】:

    • 谢谢。我正在逐步阅读 Laravel 书(Laravel Starter),并被困在路由到闭包(第 13 页)。这为我解决了这个问题。
    • 这解决了我的问题。我的 apache 文件夹的根目录中有一个 .htaccess,它破坏了 laravel 的 htaccess。
    • 这解决了我遇到的其他问题。使用 Laravel 生成页面,并使用 Angular 调用 REST,在 Windows 上调用 api/branches 有效,但在 linux 上,我必须更改此 url,如:index.php/api/branches 有什么方法可以解决这个问题以获得相同的 url?跨度>
    • 我从没想过它是区分大小写的
    • 将public/文件夹中的.htaccess文件放到项目根目录下,即可通过http://localhost/mysite/user访问
    【解决方案5】:

    使用 WAMP 点击 wamp 图标 ->apache->apache modules->scroll 并检查 rewrite_module 重启一个 LoadModule 重写模块

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

    【讨论】:

    • 非常感谢,从昨天开始就一直在尝试解决这个问题
    • 这似乎发生在我每次在计算机上安装/重新安装 WAMP 和 Laravel 时。这始终是问题所在。希望它最终会被记住;)
    • 在 Ubuntu 14.04 下,'sudo a2enmod rewrite' 然后 'sudo service apache2 restart' 工作。
    • 对于linux系统启用重写模块sudo a2enmod rewrite重启后sudo service apache2 restart
    【解决方案6】:

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

    例如:

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

    【讨论】:

    • 你把它放在文件的什么地方?
    【解决方案7】:

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

    【讨论】:

    • 我在 Debian GNU/Linux 7.6 上发现,除了为 apache2 启用模块(a2enmod 重写)之外,此响应还提供了部分所需内容。
    【解决方案8】:
    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)

    【讨论】:

      【解决方案9】:

      好的,所以在这个问题上猛烈抨击了一天多之后......我起床并做了我昨天应该做的事情,并调试了发生的事情!

      Laravel 在这里尝试做的是将文件 index.php 插入到作为 Route 给出的路径的前面。例如,如果您指定了一个Route::get('/account/create', ..., 并在浏览器上从localhost/laravel/authenticate/public/account/create 执行您的应用程序,那么laravel 想要执行localhost/authenticate/public/index.php/account/create,但要这样做...... Apache 需要通过@987654325 查看该请求@(您的路径可能会有所不同,具体取决于您的 laravel 应用程序的实际安装位​​置,但尾随 public 是需要进行替换的位置)必须应用“RewriteRule”。

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

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

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

      好消息是:我现在对.htaccessRewriteRulehttpd.conf 文件了解更多。将逻辑从应用程序的 public .htaccess 文件中移动,并将其放入 Apache 'bin' 文件夹中 httpd.conf 的 Directory ... 部分有一个很好的(性能)论据顺便说一句(特别是如果你有访问该文件夹)。

      【讨论】:

        【解决方案10】:

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

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

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

        【讨论】:

        • 这在从 puphpet 下载的 vagrant 机器上为我解决了这个问题。
        • 谢谢,你是救命稻草。
        • 非常感谢,我浪费了 4 个小时才找到这个
        • 使用 Laravel-5.4 在 MacOS High Sierra 10.13.3 上为我工作
        • @McSonk,可能问题是针对 Windows 的。此替代解决方案适用于 Ubuntu。谢谢老兄。
        【解决方案11】:

        你必须使用 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】:

          只需在终端中运行即可。

           composer dump-autoload
          

          【讨论】:

            【解决方案13】:

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

            【讨论】:

            • 您对 8 个问题发布了完全相同的答案。如果您认为它们是重复的,则应将它们标记为重复,而不是对每个都发布答案。
            【解决方案14】:

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

            # LoadModule rewrite_module libexec/apache2/mod_rewrite.so
            

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

            【讨论】:

              【解决方案15】:

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

              【讨论】:

                【解决方案16】:

                自动加载依赖的简单命令

                composer dump-autoload
                

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

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

                【讨论】:

                  【解决方案17】:

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

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

                  【讨论】:

                    【解决方案18】:
                    1. 设置 .env 文件
                    2. 配置index.html
                    3. 确保你有.htaccess
                    4. sudo service apache2 restart

                    很可能是由于缓存问题

                    【讨论】:

                      【解决方案19】:

                      只需在终端中运行即可。

                      php artisan route:clear
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-12-20
                        • 2018-12-11
                        • 2018-12-03
                        • 2019-07-09
                        • 1970-01-01
                        • 2022-11-15
                        相关资源
                        最近更新 更多