My Routes are Returning a 404, How can I Fix Them?

2019-01-30 21:43发布

I've just started learning the Laravel framework and I'm having an issue with routing.

The only route that's working is the default home route that's attached to Laravel out of the box.

I'm using WAMP on Windows and it uses PHP 5.4.3, and Apache 2.2.22, and I also have mod_rewrite enabled, and have removed the 'index.php' from the application.php config file to leave an empty string.

I've created a new controller called User:

class User_Controller extends Base_Controller {

    public $restful = true;

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

I've created a view file in application/views/user/ called index.php with some basic HTML code, and in routes.php I've added the following:

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

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

The first route works fine when visiting the root (http://localhost/mysite/public) in my web browser, but when I try to go to my second route with http://localhost/mysite/public/user I get a 404 Not Found error. Why would this be happening?

17条回答
乱世女痞
2楼-- · 2019-01-30 22:34

I think you have deleted default .htaccess file inside the laravel public folder. upload the file it should fix your problem.

查看更多
成全新的幸福
3楼-- · 2019-01-30 22:37

OK, so after bashing my head on this problem for a little over a day... I got up and did what I SHOULD have done yesterday, and DEBUGGED what was going on!

What Laravel is TRYING to do here, is insert the file index.php right in front of the path given as a Route. SO for instance, if you specified a Route::get('/account/create', ..., and execute your app from say localhost/laravel/authenticate/public/account/create on your browser, then laravel wants to execute localhost/authenticate/public/index.php/account/create, but to do that.... Apache needs to see that requests through /wamp/www/laravel/laravel/authentication/public (your path may vary somewhat, depending on where your laravel app is actually installed, but the trailing public is where the substitution needs to take place) must have a 'RewriteRule' applied.

Thankfully, laravel supplies the correct Rewrite rule in a handy .htaccess file right there in your app's public folder. The PROBLEM is, the code in that '.htaccess' file won't work with the way WAMP is configured out of the box. The reason for this SEEMS to be the problem suggested by muvera at the top of this thread -- the rewrite_module code needs to be loaded by Apache before the RewriteRule stuff will work. Heck this makes sense.

The part that DOESN'T make sense: simply stopping and restarting Apache services will not pick up the changes necessary for WAMP to do the right thing with your RewriteRule -- I know, I tried this many times!

What DOES work: make the changes suggested by muvera (see top of thread) to load the correct modules. Then, reset your whole Windows session, thus dumping Apache out of memory altogether. Restart (reload) WAMP, and VOILA! the fix works, the correct RewriteRule is applied, yada, yada; I'm living happily ever after.

The good news out of all this: I know a LOT more about .htaccess, RewriteRule, and httpd.conf files now. There is a good (performance) argument for moving the logic from your app's public .htaccess file, and putting it into a Directory ... section of your httpd.conf in your Apache 'bin' folder BTW (especially if you have access to that folder).

查看更多
唯我独甜
4楼-- · 2019-01-30 22:37

The Main problem of route not working is there is mod_rewrite.so module in macos, linux not enabled in httpd.conf file of apache configuration, so can .htaccess to work. i have solved this by uncomment the line :

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Remove the # from above line httpdf.conf. Then it will works. enjoy!

查看更多
神经病院院长
5楼-- · 2019-01-30 22:38

On my Ubuntu LAMP installation, I solved this problem with the following 2 changes.

  1. Enable mod_rewrite on the apache server: sudo a2enmod rewrite.
  2. Edit /etc/apache2/apache2.conf, changing the "AllowOverride" directive for the /var/www directory (which is my main document root): AllowOverride All

Then restart the Apache server: service apache2 restart

查看更多
地球回转人心会变
6楼-- · 2019-01-30 22:38

Using WAMP click on wamp icon ->apache->apache modules->scroll and check rewrite_module Restart a LoadModule rewrite_module

Note, the server application restarts automatically for you once you enable "rewrite_module"

查看更多
家丑人穷心不美
7楼-- · 2019-01-30 22:39

you must be using Laravel 5 the command

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

and in routes.php

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

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

Laravel 5 command changes for view and controller see the documentation i was having same error before

查看更多
登录 后发表回答