Hướng config đường dẫn url domain.com/abc với dự án Laravel
Bài đăng này đã không được cập nhật trong 5 năm
Mở đầu
Hôm nay mình sẽ giới thiệu đến các bạn một vấn đề mà mình thường hay gặp khi triển khai ứng dụng cho khách hàng. Thay vì url có dạng http://example.dev/ như bình thường thì khách hàng lại muốn http://example.dev/abc . Thật ra có rất nhiều cách để làm cái này nhưng tùy mỗi tình huống mình sẽ dùng những cách khác nhau.
Cấu trúc thư mục của Laravel
Vì phạm vi bài này đang nói đến config url nên mình xin tập trung vào một vài folder và file sau:
- public: Là nới chứa file index.php, là nơi nhận các yêu cầu gởi đến ứng dụng và cấu hình autoloading. Ngoài ra đây là nơi chứa các images, Js, Css của hệ thống bạn. Bên trong file public thì khi triển khai bạn cần lưu ý đến file .htaccess. Nếu bạn đã từng làm việc với web thuần thì file này có mục đích là Rewrite Url ( tức là alias đường dẫn để tránh lộ đường dẫn file).
- server.php: Mục đích của file này là build-in 1 web server bằng lệnh :
php artisan server
thì bạn đang thực thi file này nên nó thường được dùng ở phát triển mà không dùng ở production.
Vậy mình sẽ config như thế nào? Theo như mình biết thì sẽ có 2 cách hay dùng đó là Thay thư mục public bằng thư mục abc hoặc Tạo đường dẫn thư mục public/abc. Nào chúng ta cùng tìm hiểu nào!
Thay thư mục public bằng thư mục abc
Đây là cách làm đơn giản chỉ cần bạn thay tên thư mục là xong.
Và ở file config domain (mình dùng appache nên nó như sau)
sudo vim /etc/apache2/sites-enabled/abc.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
SetEnv HTTPS on
ServerName example.dev
ErrorLog /var/log/apache2/error_example.log
CustomLog /var/log/apache2/access_example.log combined
<Directory "/var/www/html">
Options -Indexes
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Các bạn có thấy là mình không có dẫn đến /var/www/html/public
như bình thường mà chỉ đến /var/www/html
vì như vậy thì khi bạn trỏ đến http://example.dev/abc
thì web bạn mới chạy được (easy phải không )
Nhưng nó chỉ thích hợp cho các dự án là API thuần không có view. Vì như các bạn biết
asset()
vàpublic_path()
điều bắt đầu từ public
Vậy nếu các bạn muốn tưowng thích thì các bạn hãy ghi đè các function này tham khảo Mình thì thấy các này cũng được nhưng ghi đè lại hàm của vendor thì mình lại không thích lắm
Tạo đường dẫn thư mục public/abc
Bước 1: Tạo đường dẫn public/abc và coppy toàn bộ vào folder này
Ở đây bạn thấy có file .htaccess.
- File ở
public/.htaccess
:
RewriteEngine On
RewriteRule ^$ /abc [L]
=> cái này nó sẽ tự động chuyển đến http://example.dev/abc
khi bạn truy cập http://example.dev/
- File
public/abc/.htaccess
: mục đích củng chỉ là rewirte lại các url thôi
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
- File
server.php
:
<?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/abc'.$uri)) {
return false;
}
require_once __DIR__.'/public/abc/index.php';
Kết luận
Hy vọng với cách làm này thì các bạn có thể triển khai dự án tốt hơn Hẹn gặp lại
All rights reserved