skip to Main Content

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

3

Answers


  1. 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>
    
    Login or Signup to reply.
  2. 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 [email protected]
    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

    Login or Signup to reply.
  3. 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.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search