Laravel Routes not working, Apache configuration only allows for public/index.php/route
Solution 1:
Two most common causes of this behavior are:
-
mod_rewrite not enabled
sudo a2enmod rewrite && sudo service apache2 restart
-
AllowOverride
is set to None, set it to All, assuming Apache2.4sudo nano /etc/apache2/apache2.conf
search for <Directory /var/www/>
and change AllowOverride None
to AllowOverride All
, then save the file and restart apache
Solution 2:
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>
Solution 3:
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)
Solution 4:
Changing AllowOverride None
to AllowOverride All
and sudo a2enmod rewrite && sudo /etc/init.d/apache2 reload
did help.