Hướng dẫn sử dụng .htaccess trên Apache

Chào các bạn, hôm nay mình sẽ hướng dẫn các bạn thực hiện một số cách redirect cơ bản sử dụng file .htaccess của Apache.

File .htaccess là file dùng để quản lý cách mà web server Apache sẽ xử lý các request của website. Các cấu hình bên trong file .htaccess sẽ được “override” các cấu hình trong “httpd.conf” của website đó, vì vậy để htaccess hoạt động được, chúng ta cần phải cho phép “AllowOverride all” tại block config của website đó.

Redirecting a URL

Redirect file các bạn dùng cấu hình như sau

Redirect /file.html /template/form.html

Redirect từ file tới URL bên ngoài

Redirect /file.html http://google.com

Redirect path đến URL bên ngoài

Redirect /login/ http://123host.vn

Redirect path cũ tới path mới

RewriteRule ^images/(.*)$ /images/archives/$1 [R=301,NC,L]

Redirecting error messages

Các bạn có thể sử dụng .htaccess để cấu hình các trang Error mà Apache trả về như sau

ErrorDocument 404 http://google.com/
ErrorDocument 403 /images/403.gif

Redirect www in the URL

Bạn muốn người dùng truy cập website của bạn tất cả đều có www, các bạn có thể cấu hình như sau

RewriteEngine On
RewriteCond %{HTTP_HOST} ^123host.vn
RewriteRule (.*) http://www.123host.vn/$1 [R=301,L]

Hoặc bạn muốn redirect ngược lại từ www về non-www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.123host.vn
RewriteRule (.*) http://123host.vn/$1 [R=301,L]

Redirect HTTP to HTTPS for your site

Các bạn vừa cài SSL nhưng website vẫn chưa hiển thị ổ khóa xanh, các bạn cần phải redirect về HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

Hoặc redirect traffic từ port 80 chuyển sang HTTPS

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.123host.vn/$1 [R=301,L,NE]

Advanced config for .htaccess using Mod_Rewrites

Sau đây là một số cấu hình phức tạp hơn cho .htaccess sử dụng module rewrites của Apache, mỗi cấu hình được sử dụng cho một mục đích cụ thể khác nhau, các bạn có thể tham khảo và sử dụng nếu trường hợp của các bạn yêu cầu nhé

Thay đổi file extension cho 1 URL

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)\.txt$ $1.php [L]

Cấu hình redirect trên sẽ redirect tất cả các URL có đuôi là .php sang .txt

Redirect một sub folder sang một custom port

RewriteCond %{SERVER_PORT} !^8080$
RewriteRule ^email_admin/(.*[^/])/?$ http://%{HTTP_HOST}:8080/$1/ [R=301,L]

Cấu hình trên sẽ redirect bất cứ URL nào có path /email_admin đến địa chỉ server chạy port 8080

Load Balancing sử dụng mod_rewrites

RewriteEngine on
RewriteMap lb "rnd:/server/serverlist.txt"
RewriteRule "^/(.*)" "http://${lb:servers}/$1" [P,L]

nội dung của file /server/serverlist.txt

## serverlist.txt
servers one.example.com|two.example.com|three.example.com

Cấu hình trên sẽ giúp bạn Load Balancing random giữa các server trong file serverlist.txt, cách cấu hình này khá giống với việc cấu hình Load Balancing sử dụng Multiple Records DNS cho domain.

Kết luận

Hy vọng với vài mẹo nhỏ trên có thể giúp các bạn tối ưu việc tương tác với website qua URL theo nhu cầu của ứng dụng. Thế giới của mod_rewrites còn vô cùng nhiều cách thức “thiên biến vạn hóa” khác nhau, nếu các bạn có mẹo nào hữu ích có thể chia sẻ trong phần bình luận bên dưới cho chúng mình nhé. Cảm ơn các bạn đã theo dõi bài viết. OKAY, AS ALWAYS, PEACE OUT!

Rate This Article

Leave A Comment?