Làm thứ làm cho Laravel Request của bạn thú vị hơn

Laravel: Loại bỏ public khi GO LIVE

Laravel: Loại bỏ public khi GO LIVE

Chào các bạn,

Như các bạn đã biết, khi ta dev với Laravel 5, ta phải thông qua đường dẫn kèm /public để có thể kiểm tra và sử dụng.

Điều này rất bất tiện và làm dài và xấu cái URL khi ta GO LIVE dự án đó.

Một số cách nếu các bạn search sẽ tìm được:

  • Đem thư mục public ra ngoài root.
  • Đổi server.php => index.php và copy toàn bộ từ public ra (trừ index.php trong đó).
  • Thông qua VirtualHost của apache set trỏ thẳng vào thư mục public.

Và những cách này đa số đều ko ổn và ko hiệu quả cao.

Vậy nên mình sẽ hướng dẫn cách các bạn loại bỏ public hay nhất và hiệu quả nhất ngay cả khi sử dụng shared hosting.

1/ Phân chia files, thư mục

Ví dụ mình sử dụng shared hosting nhé, mình muốn đưa lên và vào thẳng sethphat.com thay vì sethphat.com/public.

Điều đầu tiên, ta nén lại toàn bộ files trong thư mục public dưới dạng file .zip

Và còn các files, thư mục còn lại của project, ta sẽ bỏ vào 1 thư mục VD: laravelSource và nén lại thư mục này dưới dạng file .zip

Vậy là ta xong bước 1 trước đã 😀

2/ Upload và giải nén.

Ta cứ vào thẳng public_html và upload 2 files .zip vừa nãy và giải nén ra.

Vậy bây giờ cấu trúc trong root của chúng ta gồm:

  • Các files/folder của thư mục public.
  • Thư mục laravelSource.

Bây giờ các bạn cứ cấu hình .env trong laravelSource, import db,… chuẩn bị đầy đủ hết nhé.

3/ Chỉnh sửa index.php

Ở ngoài public_html, ta mở file index.php ra và ta sửa lại đường dẫn các file được require

index.php

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <[email protected]>
 */

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

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/

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

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

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

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

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

Sửa lại 2 nơi được require, thêm tên thư mục của mình vào, thư mục source Laravel của mình là: laravelSource.

Đến đây bạn đã có thể vào domain để test và thành công!

4/ Bước quan trọng nhất

Bạn đã tưởng chừng bước 3 đã xong thì thật ra nó chưa xong, nó chỉ mới hiển thị và sử dụng được thôi.

Tuy nhiên đặt trường hợp nếu ta upload file, 100% file đó sẽ vào laravelSource/public chứ nó ko vào thư mục root của mình.

Vậy nên để nó chuyển file vào thư mục root của mình (public_html/upload chẳng hạn), ta cần phải binding nó lại như sau:

Ta thêm ngay bên dưới biến $app như sau:

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

// Bind folder
$app->bind('path.public', function() {
    return __DIR__;
});

Khi đã binding nó lại, Laravel sẽ hiểu và mỗi lần upload, nó sẽ đưa file vào đúng thư mục mình cần.

Bây giờ các bạn đã thành công khi đưa Laravel lên và không thông qua thư mục public để vào website nữa :D.

Các bạn đã hoàn thành bài Laravel: Loại bỏ public khi GO LIVE.

Bài viết này chỉ bỏ public thui nha, còn các bạn muốn GO LIVE FULL RELEASE thật sự thì còn phải sửa lại ở một số nơi của env nữa 😀

Có thể bài sau: Sử dụng Laravel để gửi mail thông qua SMPT và MailGun.

Chúc các bạn thành công!

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook