Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Routes not working, Apache configuration only allows for public/index.php/route

Example:

Route::get('/get', function() {
    return 'get';
});

To view the route above, I must navigate to public/index.php/get.

I've viewed quite a few SO posts and googled around trying different things and it hasn't made a difference (yes I restart apache every time).

Here is my .htaccess in the public directory:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
</IfModule>

# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

What could be causing this still? I'm running Ubuntu.

like image 816
user3817533 Avatar asked Jul 16 '14 15:07

user3817533


5 Answers

Two most common causes of this behavior are:

  1. mod_rewrite not enabled

    sudo a2enmod rewrite && sudo service apache2 restart

  2. AllowOverride is set to None, set it to All, assuming Apache2.4

    sudo nano /etc/apache2/apache2.conf

search for <Directory /var/www/> and change AllowOverride None to AllowOverride All, then save the file and restart apache

like image 117
peter.babic Avatar answered Oct 04 '22 18:10

peter.babic


I know it's an old question, but for people coming from search engines:

Although the apache site config I had enabled (/etc/apache2/sites-enabled/sitename.conf) had AllowOverride All

But for some reason the /etc/apache2/apache2.conf file had AllowOverride None for /var/www/ directory.

Solution:

  1. Run nano /etc/apache2/apache2.conf
  2. Find Directory /var/www/ (on mac you can ctrl+w, paste the text and hit enter)
  3. Inside it, change AllowOverride None to AllowOverride All

So, this

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

becomes this:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
like image 36
Rizwan Avatar answered Oct 04 '22 18:10

Rizwan


In the Apache Configuration file may be located at /etc/httpd/conf/httpd.conf (location and names varies on server), provide AllowOverride permission for .htaccess file by updating the directory as follows:

<Directory "/var/www/laravel-sample-project/public">
   AllowOverride All
</Directory>

This may solve your problem on laravel routes.

Also ensure that you're providing access "AllowOverride All" limited to directories, such as mentioned above and limited to the directory /var/www/laravel-sample-project/public (mentioned here is the root directory for my project which may varies for you)

like image 25
Tantrik Avatar answered Oct 04 '22 18:10

Tantrik


Do you have mod_rewrite installed and enabled on apache? Try to remove the if lines ( and ) and see if it throws an error when you try to load the website. If it does, run sudo a2enmod rewrite and restart apache.

This is the .htaccess I have on my public/ directory:

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
like image 39
Eduardo Reveles Avatar answered Oct 04 '22 19:10

Eduardo Reveles


Changing AllowOverride None to AllowOverride All and sudo a2enmod rewrite && sudo /etc/init.d/apache2 reload did help.

like image 31
Mr CaT Avatar answered Oct 04 '22 19:10

Mr CaT