简体   繁体   中英

Laravel 8 404 Not Found page returned for all routes on ubuntu 18 an apache

My laravel 8 project is running in a local environment with Ubuntu 18.04, Apache 2.4.29 and php 7.3.22. It is working, but in my prod server with the same versions I got 404 for all routes. I already enabled rewrite module sudo a2enmod rewrite and my virtual host is like bellow:

DocumentRoot /home/ubuntu/project/public

<Directory /home/ubuntu/project/public/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

also I changed storage forder owner sudo chown -R ubuntu:www-data storage

your virtual host should have the contain below:

 <Directory /home/ubuntu/project/public/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all
    </Directory>

If you're using apache and your virtual host config is ok and you are using this AllowOverride all Options Indexes FollowSymLinks in your <Directory>

Just run this command:

sudo a2enmod rewrite

And restart your apache by this command:

sudo systemctl restart apache2

It's working for me.

your vitual host should look like this in order to work:

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin admin@test.com
ServerAlias test.local
ServerName test.local
DocumentRoot /var/www/html/test/public

<Directory /var/www/html/test/public>
    Options -Indexes +FollowSymLinks
    AllowOverride All
</Directory>

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/test.local-error.log
CustomLog ${APACHE_LOG_DIR}/test.local-access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Test is the name of the project which can be as you want.

You can access your project on test.local without php artisan serve

Edit: dont forget to add an entry to the machine hosts file as follow:

sudo nano /etc/hosts

add this line:

127.0.0.1       test.local

ctrl+o to save and ctrl+x to exit

Last step, just restart the apache: sudo service apache2 restart

PS: If 127.0.0.1 is already taken you can set another ip like: 127.0.0.2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM