Bài 02: Một số quy tắc & chỉ thị cơ bản trong file .htaccess

Htaccess 10/02/2017 11:09 1350
Như các bạn đã biết thì file .htaccess không phải là một ngôn ngữ lập trình nào đó. Nó được viết bởi những quy tắc Regular Expression. Trong bài viết này mình và các bạn sẽ tìm hiểu một số quy tắc và các chỉ thị cơ bản được sử dụng trong File .htaccess.

Ý nghĩa của một số cụm từ/thuật nghữ được sử dụng trong bài viết.

  • Rewrite: Viết lại.
  • Rewrite Engine: Công cụ/máy viết lại
  • Rewrite Url: Viết lại đường dẫn.
  • Rewrite Rule: Quy tắc viết lại
  • Rewrite Cond: Điều kiện để thực thi việc viết lại.

Trong khuôn khổ bài viết này mình sẽ trình bày một số chỉ thị cơ bản được sử dụng trong .htaccess.

  • RewriteEngine: Cho phép/ không cho phép chạy Rewrite Engine.
  • RewriteBase: Thiết lập URL cơ sở cho thư mục cần Rewrite.
  • RewriteCond: Định nghĩa một điều kiện trong đó Rewrite sẽ xảy ra.
  • RewriteRule: Định nghĩa các quy tắc cho các Rewrite Engine

Thống nhất rằng mỗi một dòng trong file .htaccess sẽ được coi là một quy tắc hay một dòng lệnh.(Command Line)

1. Một số ghi chú cơ bản.

1.1 Comment trong .htaccess

Nếu đã sử dụng và một lần sửa đổi cấu hình Apache thì chắc chắn bạn cũng biết, muốn sử dụng một module nào đó trong những available modules, bạn phải xóa dấu “#” (hash). Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess cũng vậy. 

Ví dụ:

#Enable Rewrite mod << đây là comment, dòng này sẽ không được thực thi trong file .htaccess

1.2 Kiểm tra module có được active trong .htaccess.

Như ta đã biết để thực thi được file .htaccess thì ta phải bật module rewrite_module nói chung và các module(mod) khác nói riêng trong httpd.conf. File .htaccess sẽ nằm trong module mod_rewrite.c

Ví dụ: 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^info$ /phpinfo.php [L]
</IfModule>

Nhưng vì một số lý do nào đó chúng ta không chắc chắn rằng module đó đã được bật trong Web Server chưa? Và để thực thi một nhóm quy tắc/dòng lệnh trong file .htacess thì phải chắc chắn một điều rằng module đó phải được bật. Và Htaccess cung cấp hàm để làm điều đó.

Ví dụ: 

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Diễn giải: Nếu mod_gzip.c được bật thì sẽ thực hiện các quy tắc/dòng lệnh của nó.

2. Chỉ thị RewriteEngine.

Đây là thao tác đầu tiên để thao tác với file .htaccess. Để bật chức năng rewrite này ta chỉ cần thêm một đoạn code nhỏ lên đầu file .htacess như sau:

Options +FollowSymlinks
RewriteEngine on

Lưu ý: Nếu không có thao tác này thì file .htaccess không thể thực thi được vài trò của nó.

3. Chỉ thị RewriteBase

Cú pháp: RewriteBase URL-path

4. Chỉ thị RewriteCond.

Cú pháp: RewriteCond TestString CondPattern

Chỉ thị RewriteCond xác định một điều kiện quy định. Có thể có nhiều chỉ thị RewriteCond đứng trước một chỉ thị RewriteRule. Các quy tắc sau đó chỉ được thực thi khi cả hai trạng thái hiện tại của URI phù hợp với biểu thức điều kiện, và những điều kiện được đáp ứng.

Ví dụ:

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

Hoặc

RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www.%{HTTP_HOST}:%{SERVER_PORT}/$1 [L,R]

Diễn giải: Địa chỉ website đầy đủ của bạn là http://www.excample.com. Khi khách truy cập gõ tên website của bạn không bắt đầu bằng www thì Web Server sẽ chuyển người truy cập vào một URL có địa chỉ bao gồm cả www.

5. Chỉ thị RewriteRule

Khi các bạn rewrite lại url thì lúc này sẽ có 2 url là url cũ và url mới, cái mà bạn mới viết lại đường dẫn là url ảo và url cũ là url thật. Khi nhập vào trình duyệt url ảo thì tự động Apache sẽ đọc file .htaccess và so sánh với url thực sau đó sẽ chuyển đến trang đích.

Để bắt đầu rewrite url mới trong htaccess ta sử dụng hàm RewriteRule

RewriteRule [url_ảo] [url_thực]

Ví dụ:

RewriteRule ^thanh-vien.html$ listusers.php

Diễn giải: Khi người dùng truy cập vào trang thanh-vien.html thì Web Server sẽ tự động chuyển đến trang đích có tên là listusers.php

Tổng kết

Trên đây mình đã trình bày một số bộ quy tắc và có thể gọi là thêm một số các hàm. Giúp bạn phần nào hiểu được cách viết một file .htaccess. Trong các bài tiếp theo mình sẽ liệt kê danh sách các ký hiệu thường dùng trong file .htaccess.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.