Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5 needs index.php using Apache virtual host

When I load pages that are not root, the page won't load without index.php before the route. The error I get:

 Not Found

 The requested URL /login was not found on this server.

 Apache/2.4.7 (Ubuntu) Server at mydomain.com Port 80

To start with I have a virtual host file containing:

//also tried adding DirectoryIndex here before <directory>
<directory /var/www/mydomain.com>
    DirectoryIndex index.php
    AllowOverride ALL
</directory>

and a .htacces in my public with :

<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>

I have another domain with the same .htaccess and appache config on the same server and it works fine. Also I did restart apache. If I use phpinfo on my index.php/route page I see at Loaded Modules:

mod_rewrite mod_setenvif 

When running the website localy with xampp everything works fine. For hours i'm trying now but I can't fix it or find any error (logs are empty) or any solutions that I haven't tried yet.

Edit:

Im using Ubuntu Ubuntu 14.04 x64 on a digital ocean VPS. And I tried turning it on and off again (as suggested). PHP Version 5.5.9-1ubuntu4.9. I followed this tutorial to config everything (except the direcoty part). I changed the location of the apache log and a file error.log is created on the given directory but no errors are in it.

My currently appache config is :this (i've triple checked the white parts where the domain name is).

When I run apache2ctl -t D DUMP_VHOSTS I get

enter image description here

this looks fine to me, also tried disabling the default config but it didnt help.

Note: i've replaced my real domain with mydomain.com in reality I use my real domain on these spots.

Thought how do I know for sure that the conf file im editing is the one being used by the domain?

like image 390
Sven van den Boogaart Avatar asked Jun 14 '15 01:06

Sven van den Boogaart


3 Answers

This is the correct Alternative htaccess rule for Laravel 5 suggested to use when the default doesn't work:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

The Options +FollowSymLinks I believe plays an important role because the DirectotyIndex acts like a symlink.

Also check /app/config/app.php to make sure you haven't set the Config('app.url') to contain the index.php.

If you have laravel installed in a sub-directory see this: How can I remove "public/index.php" in the url generated laravel?

like image 116
Neo Avatar answered Oct 24 '22 08:10

Neo


Have you tried turning it all off (shutdown), and then turning it on again?

If everything is as you say, it should work. I would try a restart to see if it changes anything.

If it doesn't, please update with what OS you are using.

like image 20
CenterOrbit Avatar answered Oct 24 '22 08:10

CenterOrbit


I ended up deleting the complete conf file and copied it again from the one thats working. I took the default .htaccess from laravel and it worked. Unfortunately I still dont know what was wrong though. The current conf file looks like

<Directory /var/www/mydomain.com>
    AllowOverride ALL
    DirectoryIndex index.php
</Directory>

My .htaccess in /public

<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 42
Sven van den Boogaart Avatar answered Oct 24 '22 08:10

Sven van den Boogaart