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.