Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

laravel 5 only root route works

I am new to laravel. I am using Ubuntu 15.04. I installed Laravel Framework version 5.1.7 (LTS) using composer and a lamp server using $ sudo apt-get install lamp-server^ command (I didn't install Homestead). I am using PhpStorm 8.0.3 as IDE.

I created three routes and a controller. The PagesController.php file looks like this:

class PagesController extends Controller
{
    public function index()
    {
        return 'Welcome to my homepage!';
    }

    public function about()
    {
        return 'Learn a little about me.';
    }

    public function hello()
    {
        return 'Hello World!';
    }
}

and the routes.php looks like this:

Route::get('/', 'PagesController@index');

Route::get('about', 'PagesController@about');

Route::get('hello', 'PagesController@hello');

Whenever I go to http://localhost:63342/my-first-app/public/ (or http://localhost:63342/my-first-app/public/index.php) it works fine and shows me the Welcome to my homepage! message. But whenever I go to http://localhost:63342/my-first-app/public/hello or http://localhost:63342/my-first-app/public/about, what I get is 404 Not Found message.

Also, the .htaccess file which is located at my-first-app/public looks like this:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

What I have tried:

  • I tried http://localhost:63342/my-first-app/public/index.php/hello or http://localhost:63342/my-first-app/public/index.php/about but it doesn't work either.
  • I entered command sudo a2enmod rewrite followed by sudo service apache2 restart but it doesn't work either.
  • I tried composer dump-autoload but it doesn't work either.
  • I changed AllowOverride from None to All in apache2.conf. Now part of it looks like this:

    <Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all denied
    </Directory>
    
    <Directory /usr/share>
        AllowOverride All
        Require all granted
    </Directory>
    
    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    <Directory /srv/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    

    but it doesn't solve the problem either.

Update (7/15/2015):

The result of running php artisan route:list looks like this:

+--------+----------+-------+------+--------------------------------------------+------------+
| Domain | Method   | URI   | Name | Action                                     | Middleware |
+--------+----------+-------+------+--------------------------------------------+------------+
|        | GET|HEAD | /     |      | App\Http\Controllers\PagesController@index |            |
|        | GET|HEAD | about |      | App\Http\Controllers\PagesController@about |            |
|        | GET|HEAD | hello |      | App\Http\Controllers\PagesController@hello |            |
+--------+----------+-------+------+--------------------------------------------+------------+
like image 479
today Avatar asked Jul 15 '15 15:07

today


People also ask

What is Laravel default route?

The Default Route FilesAll Laravel routes are defined in your route files, which are located in the routes directory. These files are automatically loaded by your application's App\Providers\RouteServiceProvider . The routes/web.php file defines routes that are for your web interface.

What is reverse routing in Laravel?

Laravel Reverse routing is the process of generating the URL based on name or symbol. It generates URL's based on route declarations. Reverse routing makes your application so much more flexible and helps the developer to write cleaner codes in View. It defines a relationship between links and Laravel routes.


4 Answers

Enable apache2 rewrite module:

sudo a2enmod rewrite

Then restart the apache2 server:

sudo service apache2 restart

And make sure that AllowOverride All to your apache2 config file.

like image 58
Sand Of Vega Avatar answered Oct 02 '22 09:10

Sand Of Vega


I have been having this annoying problem for a long time. Open .htaccess file in public folder and replace the following code, make a backup of your original code just in case.

<IfModule mod_rewrite.c>

    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/index.php [L]

</IfModule>
like image 39
MosesSoftEng Avatar answered Oct 02 '22 09:10

MosesSoftEng


Step 1: Enable mod_rewrite

sudo a2enmod rewrite

Step 2: To activate these changes restart Apache2

sudo service apache2 restart

Now check your web page is it working or not. If not follow Step 3.

Step 3: Edit Apache Configuration file

To Edit run below command:

sudo nano /etc/apache2/sites-available/000-default.conf

Then add following block of code below <VirtualHost *:80>

<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

Save the file and exit.

Restart apache2:

sudo service apache2 restart

It should be working fine now.

like image 25
Dinesh Sah Avatar answered Oct 02 '22 11:10

Dinesh Sah


Altering .htaccess file would work in this scenario per laravel 5 official document as below:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
like image 24
harshad patel Avatar answered Oct 02 '22 11:10

harshad patel