I was wondering if any of you know of a way to install Laravel 4 in a web host SUBDIRECTORY / subfolder while not exposing the /app/ folder and other sensible files to the publicly accesible part of the host.
The idea is, I'd be able to access http://mydomain.com/mylaravel/ to be able to use Laravel, but at the same time I want to avoid anyone doing something like going to http://mydomain.com/app/ or http://mydomain.com/mylaravel/app/ and basically being able to see my config files and other code.
So I figured out how to do this. I'll explain with an example.
Suppose you a domain, http://domain.com. Here's an example of the structure you might be using:
domain.com/ (the root of your web hosting)
|-- yourlaravel4_base/
|-- [some other folders...]
|-- public_html/ (where your html files and such go)
| |-- [some other folders...]
| |-- yourlaravel4/
/public_html/
is the root of the publicly accessible part of your web hosting files.
You want to create a subfolder in /public_html/
(in this case /public_html/yourlaravel4/
). In this subfolder you will store all the contents of the Laravel 4 public/
folder.
Now, for the rest of the files. You have to go to the root of your web hosting files, that is, you wanna be at domain.com/
level, therefore being able to see public_html/
and some other folders. Then, we need to create a folder here, where Laravel 4's base files will be stored. In this case, it's domain.com/yourlaravel4_base/
. Inside yourlaravel4_base/
we need to store every file and folder that exists in the base Laravel 4 directory. That would be app/
, bootstrap/
, vendor/
, server.php
, etc. Everything EXCEPT the /public/
folder, whose contents you already stored in public_html/yourlaravel4/
.
Finally, we need to edit 2 files: Laravel's /bootstrap/paths.php
and /public/index.php
.
In the paths.php
file, replace:
'app' => __DIR__.'/../app',
with:
'app' => __DIR__.'/../../yourlaravel4_base/app',
In the paths.php
file, replace:
'public' => __DIR__.'/../public',
with:
'public' => __DIR__,
In the paths.php
file, replace:
'base' => __DIR__.'/..',
with:
'base' => __DIR__.'/../../yourlaravel4_base',
In paths.php
, replace:
'storage' => __DIR__.'/../app/storage',
with:
'storage' => __DIR__.'/../../yourlaravel4_base/app/storage',
In index.php
, replace:
require __DIR__.'/../bootstrap/autoload.php';
with:
require __DIR__.'/../../yourlaravel4_base/bootstrap/autoload.php';
In index.php
, replace:
$app = require_once __DIR__.'/../bootstrap/start.php';
with:
$app = require_once __DIR__.'/../../yourlaravel4_base/bootstrap/start.php';
Upload changes. Now you should be able to have Laravel 4 installed in a subfolder in your website without actually exposing the app/
folder and other sensitive files. :)