Hướng Dẫn Cấu Hình .htaccess Để Chạy Laravel Từ Thư Mục public
I. Giới thiệu
Trong Laravel, thư mục public là nơi duy nhất được phép truy cập trực tiếp từ trình duyệt. Tuy nhiên, trong nhiều trường hợp cấu hình hosting không cho phép trỏ DocumentRoot vào thư mục này. Khi đó, việc sử dụng file .htaccess để chuyển hướng toàn bộ request từ thư mục gốc vào public là giải pháp hiệu quả, giúp ứng dụng Laravel hoạt động đúng cách và đảm bảo an toàn mã nguồn. Bài viết này sẽ hướng dẫn cách cấu hình .htaccess nhằm chuyển hướng request vào thư mục public của Laravel.
Trong bài viết này, khi truy cập website xuất hiện lỗi 404 Not Found do domain đang trỏ vào thư mục gốc của dự án, trong khi Laravel chỉ hoạt động đúng khi truy cập qua thư mục public (ví dụ: domain/public). Vì vậy, chúng ta cần cấu hình file .htaccess để chuyển hướng toàn bộ request về thư mục public.

II. Hướng cấu hình .htaccess
Bước 1: Tạo file .htaccess

Bước 2: Dán nội dung vào file .htaccess
Ở bước tiếp theo, hãy sao chép đoạn mã dưới đây và dán vào file .htaccess trong thư mục chứa mã nguồn Laravel, file này nằm cùng cấp với thư mục public/
<IfModule mod_rewrite.c># That was ONLY to protect you from 500 errors# if your server did not have mod_rewrite enabledRewriteEngine On# RewriteBase /# NOT needed unless you’re using mod_alias to redirectRewriteCond %{REQUEST_URI} !/publicRewriteRule ^(.*)$ public/$1 [L]# Direct all requests to /public folder</IfModule>
Dưới đây là ý nghĩa đoạn mã:
<IfModule mod_rewrite.c>
Dòng này dùng để kiểm tra xem module mod_rewrite có được kích hoạt trên máy chủ Apache hay không. Toàn bộ các cấu hình bên trong chỉ được thực thi khi module này đã được bật, nhằm tránh phát sinh lỗi 500 nếu server không hỗ trợ rewrite.
RewriteEngine On
Dòng lệnh này dùng để kích hoạt chức năng rewrite URL trên máy chủ, cho phép Apache xử lý các quy tắc chuyển hướng được khai báo bên dưới.
RewriteCond %{REQUEST_URI} !/public
Đây là một điều kiện kiểm tra, dùng để xác định rằng đường dẫn request hiện tại không chứa /public. Điều này giúp tránh tình trạng rewrite lặp vô hạn khi request đã được chuyển vào thư mục public.
RewriteRule ^(.*)$ public/$1 [L]
Đây là quy tắc rewrite chính. Khi điều kiện phía trên được thỏa mãn, toàn bộ request sẽ được chuyển vào thư mục public, bao gồm cả các đường dẫn con.
Tham số [L] (Last) cho biết đây là quy tắc cuối cùng và Apache sẽ không tiếp tục xử lý các rule rewrite khác sau đó.
</IfModule>
Dòng này dùng để kết thúc khối điều kiện kiểm tra module mod_rewrite.
Như vậy, với việc cấu hình file .htaccess như trên, toàn bộ request truy cập vào website sẽ được chuyển hướng về thư mục public – nơi Laravel khởi chạy ứng dụng. Cách làm này đặc biệt hữu ích trong trường hợp không thể trỏ trực tiếp DocumentRoot vào thư mục public, giúp website hoạt động ổn định và đảm bảo an toàn cho mã nguồn. Sau khi cấu hình xong, bạn chỉ cần tải lại trang để kiểm tra kết quả.
