How to install Laravel 4 to a web host subfolder without publicly exposing /app/ folder?
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.
Solution 1:
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. :)
Solution 2:
You can use an alias: no hankey-pankey with widespread directories on your system.
Specify in your httpd.conf or admin-panel:
/mylaravel/ /path/to/laravel/public
Furthermore, specify the URL in your Laravel's app.php
Line 29
'url' => 'http://yourdomain.com/mylaravel/',
Eventually set the RewriteBase in your /public/.htaccess
RewriteBase /mylaravel/
Works like a charm and keeps your directory structure clean and to the point!
Solution 3:
People, people! No need to over-complicate things!
(For other public folders, such as htdocs
or www
just replace public_html
in the following with your one.)
- Put all your Laravel stuff in the top-level folder (so that the
app
folder is next to thepublic_html
folder) - Move all files from
public
topublic_html
(be sure to also move hidden files, such as.htaccess
!) - Delete the now empty
public
folder -
In
bootstrap/path.php
change'public' => __DIR__.'/../public',
to'public' => __DIR__.'/../public_html',
- Done.
Solution 4:
emmanuel answer doesnt work for me but i did some changes to make it work . although i used my web root to be the source of a project . there it is ; i have htdocs folder as a root folder but you may have other, such as public_html , www or so on . you can easily replace my htdocs with the one you have .
fine .
my dircetory
root/ htdocs .htaccess .override
first i solved all of laravel dependencies on my localhost on windows with composer . after that i did pack the whole package into laravel4.zip . in my htdocs i create a laravel folder and i did upload and unzip the zip file in it.
htdocs/ laravel/ app bootstrap public vendors ...
so after i did unzip the file i move everything in public folder into htdocs folder
htdocs/ laravel packages .htaccess favicon.ico index.php robots.txt
now we have to rewrite some pathes in htdocs/index.php and htdocs/laravel/bootstrap/paths.php
but lets open htdocs/laravel/bootstrap/paths.php . you would see
'app' => __DIR__.'/../app',
what does it mean . it means that we are standing at htdocs/laravel/bootstrap/ path . and there for we need exit this folder to laravel folder then going for app folder . ok . this is the structure of the laravel for routing . if you get this right you can make your laravel run .
find
'public' => __DIR__.'/../public',
and change it to
'public' => __DIR__.'/../../htdocs',
(simple ha ) with one (../) of these we can go up one folder . so now we are at laravel folder . but we need to be in htdocs . so we have to write another (../) to get there .
open htdocs/index.php and find
require __DIR__.'/../bootstrap/autoload.php';
change it into
require 'laravel/bootstrap/autoload.php';
require is a built-in php function so we are going to treat it as a simple php . we dont realy need laravel style for fetching autoload.php file . so simply remove it and go for classic style
find
$app = require_once __DIR__.'/../bootstrap/start.php';
change it into
$app = require_once 'laravel/bootstrap/start.php';
Solution 5:
If you are trying to run Laravel 5.1 into a shared hosting space and all of the above answers seems to be a bit different from the actual Laravel files/folders or you are looking how to put your laravel 5/5.1 into a sub directory on your shared hosting space so you can access it like this:
http://mywebsite.com/mylaravel/
So this answer is for you, first of all make sure you meet
Laravel 5.1 requirements :
- PHP 5.5
- PHP extension Mcrypt
- PHP extension Mbstring
- PHP extension OpenSSL
here an easy two tutorials for you :
Link 1
Link 2