Thay đổi thư mục Public trong laravel framework
Trong quá trình làm việc với laravel, đôi khi sẽ có thay đổi chút về thư mục public
trong laravel. Cụ thể như khi chạy nó trên các shared hosting thường là chỉ có thư mục public_html
hoặc một số qui định bắt buộc ở các môi trường khác nhau mà tên thư mục này sẽ đổi theo, và trong bài này mình sẽ hướng dẫn các bạn các thay đổi thư mục này trong laravel. Tại thời điểm mình viết bài này thì laravel đang là phiên bản 5.3.x
.
Lưu Ý: Mình thấy một số bạn hay đem tập tin
index.php
của Laravel ra ngoài thư mục gốc và chạy luôn, điều này rất nguy hiểm và mình khuyên các bạn tuyệt đối không làm như thế, rất có thể bị lộ thông tin bảo mật cấu hình cho ứng dụng, vì thế bạn chỉ được chạy tương tác với client qua thư mụcpublic
hoặc một thư mục khác mà mình sẽ hướng dẫn trong bài này mà thôi.
Just do it
Đầu tiên bạn cần đổi tên của thư mục public
ở đây mình sẽ đổi thành public_html
.
Lưu Ý: bạn có thể đổi tên thư mục
public
và đem toàn bộ source còn lại của Laravel vào một thư mục bất kỳ ví dụ thư mụclaravel
sau cấm quyền truy cập vào thư mục đó đều được.
Tiếp theo kiểm tra trong tập tin public_html/index.php
xem đã trỏ đúng vào tập tin autoload.php
, app.php
của laravel chưa. Ở dưới đây mình dùng path_to_root
chỉ thư mục gốc của laravel chứa source của ứng dụng, có thể là /
nếu mặc định hoặc laravel
như ví dụ mình lưu ý ở trên.
require __DIR__.'/../path_to_root/bootstrap/autoload.php';
// và thằng này nữa
$app = require_once __DIR__.'/../path_to_root/bootstrap/app.php';
Tạo một class con path_to_root/app/MyApp.php
kế thừa từ Application
của Laravel, với nội dung như sau:
<?php
namespace App;
use IlluminateFoundationApplication;
class MyApp extends Application
{
public function publicPath()
{
return $this->basePath.'/public_html';
}
}
Sau đó bạn vào tập tin path_to_root/bootstrap/app.php
và thay đổi như sau:
// Bỏ thằng Application cũ đi
// $app = new IlluminateFoundationApplication(
// realpath(__DIR__.'/../')
// );
$app = new AppMyApp(
realpath(__DIR__.'/../')
);
Xong, như vậy là xong rồi đấy, để chắc ăn để cho composer nó autoload lại nhĩ, bật Terminal tại thư mục gốc của Laravel, nhập lệnh sau:
composer dump-autoload
Sau đó, chạy thử đường dẫn mới nhé. Chúc các bạn thành công nhé.
P/s: Sau khi thành công còn 2 vấn đề nữa bạn cần giải quyết đó là sửa lại link của
storge/public
thì dùng lệnhln -s ..
là được, còn nữa nhớ cấu hình lạielixir
để xuất assets cho đúng, 2 cái này bạn tự thực hiện nhé.
Blog của mình: https://henrydinh.com/article/thay-doi-thu-muc-public-trong-laravel-framework/
Mình thấy là tại sao chạy một app dùng Laravel mà lại đi dùng shared host? Phải bundle tùm lum vào trước khi push rồi nguy cơ mất bị lộ source code rất cao nữa.
btw, blog đẹp đó Hân
Cái này em cũng khuyên nhiều người ko nên, mất code như chơi, với nhiều thứ cần lại không được đẩy mạnh như nginx hay mariadb mà ép vào khuôn là apache
hehe học đòi theo anh ý mà chuyển sang web tĩnh dùng, cơ mà em dùng jekyll
cuối cùng cũng đã dụ dỗ được ai đó đi theo con đường web tĩnh
@dqh Chào bạn, mình mới tìm hiểu về laravel, cho mình hỏi chút. Để file index.php ở thư mục root nguy hiểm có phải vì hacker có thể truy vấn vào các thư mục khác từ đường dẫn, còn nếu index.php ở trong public thì chỉ truy cập được các file và thư mục ở trong public thôi đúng ko nhỉ. Vậy có cách nào khắc phục không bạn. Mình tưởng file .htaccess có thể cấm truy cập các thư mục. Cám ơn bạn