Home » Php » Avoid public folder of laravel and open directly the root in web server

Avoid public folder of laravel and open directly the root in web server

Posted by: admin November 30, 2017 Leave a comment

Questions:

I was going through all possible sample on internet to solve this. Still it is an headache.

I just want to avoid the ‘public’ in www.mylaravelsite.com/public/
and make it like www.mylaravelsite.com for the root directory.

Now I do not want to avoid the security concern,So I learned .htaccess would be the best way.

Any solution friends ?

& advance thanks for interacting !

Answers:

Let’s assume you have this folder structure in your server

.cpanel/
public_html/
public_ftp/
..

And the laravel folder structure is

app/
bootstrap/
public/
vendor/
composer.json
artisan
..

You can create a folder name mylaravelsite on your server inline with public_html and public_ftp folder, and copy to it the whole laravel application except the public folder because you will paste all of it contents on the public_html, so you have now:

.cpanel/
public_html/
public_html/packages
public_html/vendor
public_html/index.php
public_html/.htaccess
...
public_ftp/
mylaravelsite/
mylaravelsite/app
mylaravelsite/bootstrap
...

On your public_html/index.php change the following line:

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/start.php';

to

require __DIR__.'/../mylaravelsite/bootstrap/autoload.php';

$app = require_once __DIR__.'/../mylaravelsite/bootstrap/start.php';

and also don’t forget to change /mylaravelsite/bootstrap/paths.php public path, you might use it.

'public' => __DIR__.'/../public',

to

'public' => __DIR__.'/../../public_html',

Your site should be running.

Questions:
Answers:

It sounds like the information you are missing is:

Documentroot

This is also called the “web root”. Apache specifically calls it the DocumentRoot – Click that link for the official explanation.

Basically what it does is set which directory the server pulls files from. In Laravel, the document root should be the public folder.

Setting the DocumentRoot to public means that going to http://mylaravelsite.com in the browser will infact be “pointing” to the public folder as you want.

In the .htaccess file (actually, more likely in the virtual host configuration), you can set the DocumentRoot for your site:

DocumentRoot /path/to/laravel-app/public

How you set this up depends on your hosting. Each hosting has different ways to setup a website and so we cannot answer that specifically for you – you should consult your web hostings tech support. The key point is that the public directory should be the web root, while everything else should be “behind the web root”.

Fair warning tho: some hosting providers do not give you enough access to accomplish that.

Questions:
Answers:

Create .htaccess in root folder and write these line

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

For production server it is recommended that you point your domain directly to the public folder

Questions:
Answers:

point your web directory to public/. If you are using apache this will work:

<VirtualHost *:80>
  DocumentRoot /var/www.mylaravelsite.com/public/
  ServerName www.mylaravelsite.com
</VirtualHost>

Questions:
Answers:

Here is the solution, But Must not do it in real projects, it is just for starter to test Laravel and i have tested it with laravel 5.0 and it is ,cut index.php and .htaccess files from public folder and paste it in the root directory and change these two lines as

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

It is Highly Recommended not to use the above method without testing environment, and should use virtual host instead.

Questions:
Answers:

All you just need to change .env file in your laravel project files. if your laravel project inside in

Root/domain/public_html/laravel/

Go to .env file and edit

you need to edit app url path which should be

APP_URL=http://www.domainname.com/laravel/public/

Thats it your project will run now. if your laravel files is in public_html, then your app url must be like this

APP_URL=http://www.domainname.com

Thanks

Questions:
Answers:

Just add .htaccess file on Laravel root if it’s not present and add following lines in it, that’s it,

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