DEV Community

Cover image for How to separate public folder in laravel
BELHARRADI JAMAL
BELHARRADI JAMAL

Posted on

How to separate public folder in laravel

Hi,everyone know that is really difficult to host Laravel project on shared host because they give just one folder public_html, and is the only entry point folder. but the structure of Laravel entry point of laravel is not the** root of project ** is root_project/public.

So how can i host Laravel in this situation ??

The best solution is to separate public folder from Laravel project.
From structure
structure
To structure
structure
With new structure we move public folder outside src code.
so now we change the name of folder public to public_html to host the project.
hosting

First we should bind public_path in bootstrap/app.php

// add this before return $app;
$app->bind('path.public', function () {
    return base_path() . '/../public_html';
});
Enter fullscreen mode Exit fullscreen mode

After that we need update path in server.php and *index.php
*

*server.php *

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylor@laravel.com>
 */

$uri = urldecode(
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);

// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__ . '/../public_html' . $uri)) {
    return false;
}

require_once __DIR__ . '/../public_html/index.php';

Enter fullscreen mode Exit fullscreen mode

index.php in public_html


<?php

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Check If The Application Is Under Maintenance
|--------------------------------------------------------------------------
|
| If the application is in maintenance / demo mode via the "down" command
| we will load this file so that any pre-rendered content can be shown
| instead of starting the framework, which could cause an exception.
|
*/

if (file_exists(__DIR__ . '/../src/storage/framework/maintenance.php')) {
    require __DIR__ . '/../src/storage/framework/maintenance.php';
}

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| this application. We just need to utilize it! We'll simply require it
| into the script here so we don't need to manually load our classes.
|
*/

require __DIR__ . '/../src/vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request using
| the application's HTTP kernel. Then, we will send the response back
| to this client's browser, allowing them to enjoy our application.
|
*/

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

$kernel = $app->make(Kernel::class);

$response = $kernel->handle(
    $request = Request::capture()
)->send();

$kernel->terminate($request, $response);

Enter fullscreen mode Exit fullscreen mode

That all isn't simple !!!,now you can easily host laravel project on shared hosting any problem of storage or anything else.
you can clone an example from repo laravel-new-structure

I hope that you the article and see you again with another article.

end

Discussion (0)