Flag trong htaccess
- Bài viết này sẽ giới thiệu tới các bạn các flag thường dùng trong htaccess và cách dùng flag bên trong RewriteRule.
- Bạn không cần phải học thuộc các flag này, chỉ để dành tham khảo khi cần thôi.
- Một RewriteRule có thể chứa một hoặc nhiều flag, với cấu trúc như sau:
RewriteRule pattern target [Flag1,Flag2,Flag3]
- pattern: mẫu cần xử lý.
- target: Mục tiêu hướng tới.
- Flag1,Flag2,Flag3: tuân theo quy định bên dưới:
Ví dụ:
RewriteRule "(.*\.(jpg|gif|png))$" "http://example.com$1" [P,NC]
Flag | Ý nghĩa | Mô tả |
---|---|---|
# | Comment | Để viết comment trong file .htaccess, ta dùng ký hiệu # |
[C] | Chain | Sẽ thực thi rule cùng lúc với rule tiếp theo nếu match, ngược lại sẽ bỏ qua rule tiếp theo. |
[CO] | Cookie | Flag [C] hay [cookie] Cho phép xét cookie tùy theo điều kiện RewriteRule. Đoạn code sau sẽ set cookie cho trang web theo đường dẫn tương ứng: RewriteEngine On
RewriteRule "^/index\.html" "-" [CO=cookiename:yes:.example.com:1440:/]
|
[E] | Env | Flag [E] hay env Cho phép thiết lập cho biến môi trường, có thể thiết lập trực tiếp với [E=biến:giá trị] hoặc [E=!biến] .Đoạn code sau sẽ set biến môi trường image với giá trị là 1 nếu request URI là một image, sau đó các biến này sẽ không được dùng trong access_log:
RewriteRule "\.(png|gif|jpg)$" "-" [E=image:1] CustomLog "logs/access_log" combined env=!image |
[END] | End | Kết thúc quá trình xử lý của RewriteRule đồng thời ngăn chặn mọi xử lý tiếp theo. |
[F] | Forbidden | Yêu cầu bị cấm, sẽ trả về trang lỗi 403 nếu người dùng truy cập vào nơi không cho phép. Đoạn code sau sẽ không cho chạy file .exe trực tiếp: RewriteRule "\.exe" "-" [F]
|
[G] | Gone | Cho biết trước đây tài nguyên này đã từng tồn tại, nhưng giờ không còn nữa, sẽ trả về trang lỗi 410. Đoạn code sau sẽ trả về trang 410: RewriteRule "oldproduct" "-" [G,NC]
|
[H] | handler | Buộc một RewriteRule phải xử lý theo cách được chỉ định. Đoạn code sau sẽ buộc tất cả các file không có phần mở rộng sẽ được phân tích cú pháp bởi trình xử lý php: RewriteRule "!\." "-" [H=application/x-httpd-php]
|
[L] | Last rule | Nếu rule trước được thực thi thì dừng lại, và không thực thi rule tiếp theo nữa. |
[N] | Next | Sẽ thực thi lần lượt các rule cho tới khi kết thúc không còn rule nào. Đoạn code sau đây sẽ thực hiện thay đổi lần lượt ký tự A thành B cho tới khi kết thúc không còn ký tự A: RewriteRule "(.*)A(.*)" "$1B$2" [N]
|
[NC] | No case | Sử dụng khi muốn RewriteRule phù hợp theo cách không phân biệt chữ hoa hay chữ thường. Đoạn code sau sẽ không phân biệt jpg hay JPG hay jPg: RewriteRule "(.*\.(jpg|gif|png))$" "http://example.com$1" [P,NC]
|
[NE] | No escape | Những mã ký tự như & hay " sẽ được chuyển sang mã hexcode tương ứng. VD:
RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]
|
[P] | Proxy | Yêu cầu sẽ được xử lý bởi mod_proxy, VD: nếu muốn vấn đề liên quan tới image được xử lý bởi phía server:
RewriteRule "/(.*)\.(jpg|gif|png)$" "http://example.com/$1.$2" [P]
|
[PT] | Pass through | Giống như một phép gán, sử dụng kèm với Alias để viết gọn trong RewriteRule, VD:
Alias "/icons" "/usr/local/apache/icons"
RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]
|
[R] | Redirect | Chuyển hướng (hoặc thay đổi) đường dẫn trên trình duyệt sang một đường dẫn mới, có thể sử dụng giá trị đi kèm để chỉ định chính xác chuyển hướng mong muốn xảy ra, VD: R=301 (giá trị nằm trong khoảng từ 300 tới 399). |
[S] | Skip | Sử dụng khi muốn bỏ qua một rule nào đó, có thể kết hợp với giá trị để biểu thị số lượng rule muốn bỏ qua, VD: S=2 ứng với 2 rule không áp dụng. |
[T] | Type | Cài đặt loại MINE sẽ được gửi, có thể thông qua submit form. Đoạn code sau sẽ quy định định dạng cho image: RewriteRule "IMG" "-" [T=image/jpg]
|