Flag trong htaccess

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]
Có thể sử dụng giá trị kèm theo để giới hạn số lần thực hiện, VD: [N=10].
[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]