Những ký hiệu hay dùng của htaccess

blogphp13 thg4 2019
PHP

Nội dung chính

Vấn đề Regular Expression mình đã trình bày ở serie Regular Expression trong php rồi nên mình chỉ đưa ra những quy tắc đơn giản nhất và hay dùng nhất.

Ký hiệu [list_char]

Danh sách các ký tự được phép chấp nhận

Ví dụ: [abc] => chỉ chấp nhận ký tự a hoặc b hoặc c

Ký hiệu [begin- end]

Dành sách các ký tự bắt đầu từ ký tự BEGIN và kết thúc là ký tự END

Ví dụ:

  • [a-z] => chấp nhận các ký tự thường từ a đến z
  • [A-Z] => chấp nhận các ký tự hoa từ A đến Z
  • [0-9] => chấp nhận các ký tự từ 0 đến 9
  • [a-c] => chấp nhận các ký tự từ a đến c
  • [a-zA-Z0-9] chấp nhận các chữ cái thường, hoa và các ký tự số

ký hiệu {min,max}

Xác định chiều dài cho chuỗi tối thiếu mà MIN và tối đa là Max.

Ví dụ:

  • [a-z]{5,10} => các ký tự từ a tới z dài từ 5 đến 10 ký tự
  • [A-Z]{1,100} => các ký tự từ A tới Z dài từ 1 đến 100 ký tự
  • [0-9]{10} => ký tự số dài 1 ký tự
  • [a-zA-Z]{1,} => các ký tự chữ hoa hoặc chữ thường dài từ 1 ký tự trở lên

Ký hiệu ^ và $

^ là ký hiệu bắt đầu chuỗi, $ là ký hiệu kết thúc chuỗi.

Ví dụ:

  • ^[a->z]{10}$ => chuỗi tự bắt  đầu là chữ cái thường, kết thúc cũng là chữ cái thường  và dài 10 ký tự.
  • ^freetuts$ => chuỗi cố định freetuts
  • ^freetuts[a-z]{2} chuỗi bắt đầu bằng freetuts và kết thúc là 2 ký tự thường, ví dụ freetutste, freetutssm ...

Ký hiệu .

Ký hiệu dấu chấm (.) đại diện cho ký tự bất kỳ.

Ví dụ:

  • .{10,20} => ký tự bất kỳ dài từ 10 đến 20 ký tự

ký hiệu (+) (?) (*)

  • + : xác định chiều dài 1 hoặc nhiều ký tự
  • * : xác định chiều dài từ 0 hoặc nhiều ký tự
  • ? : xác định chiều dàu 0 hoặc 1 ký tự

Ví dụ:

  • [a-z]+ => chuỗi các ký tự chữ cái thường từ 1 ký tự trở lên
  • [a-z]* => chuỗi các ký tự chữ cái thường từ 0 ký tự trở lên
  • [a-z]? => chuỗi các ký tự chữ cái thường từ 0 đến 1 ký tự

Ký hiệu ()

Dùng gom nhóm các group Regular Exprsesion, ví dụ:

  • ([a-z])([A-Z]): Góm thành 2 nhóm
  • ([a-z][A-Z]): Gom thanhf 1 nhoms

Ký hiệu [^]

Ngược lại với ký hiệu [], nghĩa là so khớp với những ký tự không nằm trong danh sách cặp [], ví dụ:

  • [^a-z]{5,10} => chuỗi dài 5 đến 10 ký tự và không có ký tự chữ cái thường từ a đến z
  • [^abc]{} => so khớp với chuỗi không chứa chữ cái a, b và c

Ký hiệu |

Đây là toán tử OR trong Regular Expression, có ý nghĩa Regex A hoặc Regex B

Ví dụ:

  • (a|b) => là ký tự a hoặc b
  • (freetuts|phonline) => chuỗi freetuts hoặc phponline

Ký hiệu \

Dùng để đặt trước các ký hiệu đặc biệt trong chuỗi RegEx. Các ký tự đặc biệt là các ký tự nằm trong danh sách ký hiệu của Regular Expression.

Ví dụ:

  • \. => ký tự dấu chấm chứ không phải ký hiệu dấu chấm trong RegEx
  • \[ => ký tự mở ngoặc vuông chứ không phải ký hiệu mở ngoặc vuông trong RegEx

Capturing GROUP

Định nghĩa và các ví dụ về capturing group đã được trình bày trong serie Regular Expression trong php ở bài này, bạn vui lòng quay lại và đọc nhé.

Hiểu đơn giản Capturing Group là thứ tự các group gom nhóm trong chuỗi RegEx, toàn chuỗi là group 0, sau đó đếm theo tứ tự từ trái qua phải để tìm đến các group tiếp theo.

Ví dụ:

  • ([a-z]{1,2})([0-9]{10,20}) => có 3 capturing group:
    • Thứ nhất là toàn chuỗi regex =>([a-z]{1,2})([0-9]{10,20})
    • Thứ 2 là theo thứ tự từ trái qua phải ta gặp group đầu tiên ([a-z]{1,2})
    • Thứ 3 là group tiếp theo ([0-9]{10,20})

Ta dùng những Capturing Group này để truyền vào URL khi viết lại đường dẫn (Rewrite Url).

Ngoài ra bạn cũng nên đọc bài None Capturing Group này đế tìm hiểu sâu hơn.

Các ký hiệu riêng của file htaccess

  1. [F] - Forbidden: Kí tự này dùng để chỉ định server sẽ trả về client trang lỗi 403 nếu truy cập vào những nơi không được phép.
  2. [L] - Last rule: kí tự này để ấn định rằng bước trước đã xong thì ngừng và không tiếp tục thực thi lệnh rewrite tiếp theo nữa.

  3. [N] - Next: chỉ thị cho server tiếp tục rewrite cho đến rule kế tiếp.

  4. [G] - Gone: Chỉ định server trả về client trang báo lỗi không tồn tại (no longer exit)

  5. [P] - Proxy: chỉ định server điểu kiển các yêu cầu được ấn định bởi mod_proxy

  6. [C] - Chain: Chỉ định server thực hiện rule hiện hành song song với rule trước đó.

  7. [R] - Redirect: chỉ định server đổi hướng request sang một trang khác trong trường hợp trình duyệt gởi yêu cầu duyệt một trang được sửa chữa đường dẫn (rewrite) trước đó.

  8. [NC] - No-case: Chỉ định server match không phân biệt hoa thường.

  9. [PT] - Pass Through: có nghĩa là dùng kí tự để buộc "rewrite engine" ấn định bảng giá trị của uri trở thành giá trị của tên files.

  10. [OR] - Toán tử kiểm tra từ trên xuống dưới, nếu điều kiện nào đúng thì dừng.

  11. [NE] - No Escape: Chỉ định server xử lí các gói tin trả về mà không dùng kí tự thoát

  12. [NS] - No Subrequest: Chỉ định server bỏ qua thư mục hiện hành nếu request nhắm vào thư mục con.

  13. [QSA] - Append Query String: chỉ định server gắn chuỗi truy vấn vào cuối cùng của URL

  14. [S=x] Skip: Chỉ định server bỏ qua không xem xét  x rules tiếp theo nữa nếu một rule đã được thực thi.

  15. [T=MIME-type] - Khai báo định dạng files của server.

  16. -d Kiểm tra thư mục có tồn tại hay không?

  17. -f Kiểm tra file có tồn tại hay không

  18. -s Kiểm tra giá trị của file có khác 0 hay không?

Bài này mang tính chất giới thiệu các ký hiệu trong file htaccess nên nếu các bạn không hiểu thì ở bài sau ta sẽ thực hành nó một cách trực quan hơn.

Mã thông báo trả về từ server

  • 401 - Authorization Required : Lỗi chưa được xác thực user và password
  • 400 - Bad request : Lỗi truy cập không hợp lệ, do server không chấp nhận request, hoặc request thiếu một số yêu cầu nào đó.
  • 403 - Forbidden : Lỗi truy cập vào trang bị cấm
  • 500 - Internal Server Error : Lỗi do server
  • 404 - Wrong page : Lỗi truy cập vào trang không tồn tại
  • 301 - Moved Permanently: 302 - Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.

Lời kết

Bài này chỉ mang tính chất giới thiệu các ký hiệu trong file .htaccesský hiệu trong Regular Expression chứ chưa thực hành nên các bạn cứ đọc nếu không hiểu thì bài tiếp theo chúng ta sẽ ứng dụng nó thực tế hơn. Nhưng ít nhất các bạn cũng phải đọc kỹ nó nhé

Gửi bài viết tới Facebook

Gửi hình ảnh