Tuesday, March 7, 2017

Run laravel project in a directory folder on shared hosting

My question is: How can i run a laravel application in a directory (not in root) on a shared webhosting?

For some of my clients I run Laravel applications in the root folder of their selected shared webhosting and remove the /public part from the URL. To make this work i move the index.php to the root folder and change the information from the index.php to:

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

Now i know that this can cause security problems but I already have found solutions to that case for shared webhosters.

The .htaccess i use to make this change is:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.eot|\.woff|\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1/$2 [L,NC]

But in this case i want the laravel project to be run in a directory called test.

Folder structure:

root (public_html)
  |-- test (directory with laravel project)

Now I'm not sure if i can simply change the .htaccess as i'm not very skilled with .htaccess files. What changes do i have to make, to make this work?

Note my urls:

// this link will be changed to:
    www.[text-placeholder].com/test/public/css/style.css 

// Output above result now:
    www.[text-placeholder].com/public/css/style.css

// But should be:
    www.[text-placeholder].com/test/public/css/style.css 



via Lars Mertens

Advertisement