Install Laravel 5 app in subdirectory with htaccess

31,481

Solution 1

What you can do is use a symlink.

  1. Place your laravel app somewhere else (outside the public_html folder)
  2. Create a symlink of your app's public folder inside the public_html folder

    cd /path/to/your/public_html

    sudo ln -s /path/to/your/laravel_app/public myapp

You can read more about symlinks here.

Solution 2

You can easily achieve this by adding additional .htaccess file in the myapp folder (this will redirect all of your requests in myapp folder to the public as it should):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

You should also modify the .htaccess in your myapp/public directory, like this:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On    
    RewriteBase /myapp/

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
</IfModule>

The change here is that you rewrite the base path RewriteBase /myapp/

Solution 3

I was having the same issue, but with the RewriteBase parameter it was possible to fix it.

This is my .htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase /my_app/

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Share:
31,481
Ben Cole
Author by

Ben Cole

Updated on July 09, 2022

Comments

  • Ben Cole
    Ben Cole almost 2 years

    The Setup

    I am trying to install a laravel 5 app in this directory on my server:

    public_html/myapp/

    And I want it to be accessed at this URL:

    http://www.example.com/myapp/

    I have created this .htaccess rule and placed it in the myapp folder in order to redirect requests :

    RewriteEngine on
    RewriteRule ^(.*)$ public/$1 [L]
    

    Problem:

    In my browser when I try to access the app I get redirected URLs like:

    • http://www.example.com/myapp/public/index.php
    • http://www.example.com/myapp/public/index.php/dashboard

    instead of nice pretty URLs like:

    • http://www.example.com/myapp/
    • http://www.example.com/myapp/dashboard

    What do I need to change in my .htaccess file to get proper URLs working?


    Update: The laravel app can be moved elsewhere if needed, as long as the desired URL structure above (with the app accessible at example.com/myapp/) can be achieved.

    Update: When I try to access example.com/myapp/dashboard I receive the following error message in the browser: NotFoundHttpException in compiled.php line 7793: with a stack trace that starts with:

    in compiled.php line 7793
    at RouteCollection->match(object(Request)) in compiled.php line 7066
    at Router->findRoute(object(Request)) in compiled.php line 7038
    at Router->dispatchToRoute(object(Request)) in compiled.php line 7030
    at Router->dispatch(object(Request)) in compiled.php line 1989
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
    

    Update: The following .htaccess file is located in the public folder:

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