我的路线是返回一个404,我如何修复他们?

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

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

175686 次浏览

Routes

Use them to define specific routes that aren't managed by controllers.

Controllers

Use them when you want to use traditional MVC architecture

Solution to your problem

You don't register controllers as routes unless you want a specific 'named' route for a controller action.

Rather than create a route for your controllers actions, just register your controller:

Route::controller('user');

Now your controller is registered, you can navigate to http://localhost/mysite/public/user and your get_index will be run.

You can also register all controllers in one go:

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

Have you tried adding this to your routes file instead Route::get('user', "user@index")?

The piece of text before the @, user in this case, will direct the page to the user controller and the piece of text after the @, index, will direct the script to the user function public function get_index().

I see you're using $restful, in which case you could set your Route to Route::any('user', 'user@index'). This will handle both POST and GET, instead of writing them both out separately.

Try enabling short php tags in your php.ini. WAMP has them off usually and laravel needs them on.

Have you tried to check if

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

was working? If so then make sure all your path's folders don't have any uppercase letters. I had the same situation and converting letters to lower case helped.

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"

Don't forget the "RewriteBase" in your public/.htaccess :

For example :

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

I was getting the same problem using EasyPHP. Found that I had to specify AllowOverride All in my <Directory> block in httpd.conf. Without this, Apache sometimes ignores your .htaccess.

Mine ended up looking like this...

<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>
Route::get('/', function()
{
return View::make('home.index');
});


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

change above to

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


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

You have to use '/'(home/default) at the end in your routes

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).

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

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

Just Run in your terminal.

 composer dump-autoload

You could try to move root/public/.htaccess to root/.htaccess and it should work

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 of httpdf.conf. Then it will works.
enjoy!

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

the simple Commands with automatic loads the dependencies

composer dump-autoload

and still getting that your some important files are missing so go here to see whole procedure

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

If you're using Vagrant though Homestead, it's possible there was an error mounting the shared folder. It looks like Vagrant takes your files from that folder and swaps out the files that are actually on the host machine on boot, so if there was an error, you're essentially trying to access your Laravel installation from when you first made it (which is why you're only getting "home"- that was generated during installation).

You can easily check this by sshing into your vm and checking the routes/web.php file to see if it's actually your file. If it isn't, exit out and vagrant halt, vagrant up, and look for errors on boot.

  1. setup .env file
  2. configure index.html
  3. make sure u have .htaccess
  4. sudo service apache2 restart

most probably it's due to cache problems

Just Run in your terminal.

php artisan route:clear