1. .htaccess là gì?
File .htaccess (hypertext access) của Apache là một file cấu hình sử dụng cho các web server chạy Apache, có tác dụng trên thư mục hiện hành và tất cả các thư mục con. Đồng thời .htaccess dùng để thiết lập các tùy chọn: thực thi hay loại bỏ các chức năng, tính năng của Apache. Vì vậy, để quản lí truy cập vào website của mình, đơn giản bạn chỉ việc soạn thảo một file .htaccess, và lưu nó vào thư mục root của website.
Do vậy trước khi điều chỉnh .htaccess, bạn nên backup cẩn thận dữ liệu, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
Bạn phải đảm bảo file này được ấn định một mức độ bảo mật nhất định, tránh những truy cập bất hợp pháp từ bên ngoài (xem, sửa, xóa) những thông tin cấu hình này. Để làm được như vậy, bạn nên chmod file .htaccess là 644, về chmod bạn có thể tìm hiểu ở nhiều tài liệu ngoài Internet.
Trường hợp bạn không có quyền cấu hình trên httpd.conf của Apache thì việc sử dụng .htaccess rất hữu ích cho nhu cầu của bạn.
Rewrite URLs
Blocking
SSI
MIME types
Tùy chỉnh Error Page
Kiểm soát Cache
Hỗ trợ người dùng không có đặc quyền: cho phép người dùng cá nhân có khả năng thay đổi cấu hình trang web của họ trong khi các tập tin cấu hình máy chủ chính không cần phải được thay đổi.
Bảo mật: việc cho phép người dùng cá nhân thay đổi cấu hình của một máy chủ có thể gây ra vấn đề liên quan đến bảo mật nếu không được thiết lập đúng cách.
2. Những chú ý quan trọng
Một lỗi cú pháp nhỏ (thậm chí là một khoản trắng) trong cấu hình .htaccess cũng khiến website của bạn hoạt động không được bình thường như trước.Do vậy trước khi điều chỉnh .htaccess, bạn nên backup cẩn thận dữ liệu, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
Bạn phải đảm bảo file này được ấn định một mức độ bảo mật nhất định, tránh những truy cập bất hợp pháp từ bên ngoài (xem, sửa, xóa) những thông tin cấu hình này. Để làm được như vậy, bạn nên chmod file .htaccess là 644, về chmod bạn có thể tìm hiểu ở nhiều tài liệu ngoài Internet.
Trường hợp bạn không có quyền cấu hình trên httpd.conf của Apache thì việc sử dụng .htaccess rất hữu ích cho nhu cầu của bạn.
3. Công dụng phổ biến
Authorization, authenticationRewrite URLs
Blocking
SSI
MIME types
Tùy chỉnh Error Page
Kiểm soát Cache
4. Ưu điểm
Thực thi ngay lập tức: Vì htaccess được đọc trên mọi yêu cầu , những thay đổi được thực hiện trong những tập tin này có hiệu lực ngay lập tức - như trái ngược với các tập tin cấu hình chính mà đòi hỏi các máy chủ được khởi động lại để các thiết lập mới có hiệu lực.Hỗ trợ người dùng không có đặc quyền: cho phép người dùng cá nhân có khả năng thay đổi cấu hình trang web của họ trong khi các tập tin cấu hình máy chủ chính không cần phải được thay đổi.
5. Nhược điểm
Giảm hiệu suất: cụ thể, khi được cấu hình để sử dụng .htaccess, thì Apache sẽ tìm kiếm tất cả những folder có chứa .htaccess để thực thi, và nó sẽ thực thi tất cả những file.htaccess tìm được. Do vậy, sẽ làm website của bạn trở nên ì ạch một cách không cần thiết.Bảo mật: việc cho phép người dùng cá nhân thay đổi cấu hình của một máy chủ có thể gây ra vấn đề liên quan đến bảo mật nếu không được thiết lập đúng cách.
6. Cách sử dụng
Tạo file .htaccess (chú ý đây là tên đầy đủ, không phải là phần mở rộng), tiến hành các thiết lập cấu hình trong file và đặt ở trong thư mục mong muốn thực hiện các cấu hình đó.
Ví dụ cấu hình sử dụng password bảo vệ thư mục và chuyển hướng tới trang 401.html khi gặp lỗi 401:
AuthName "Member's Area Name"
AuthUserFile /path/to/password/file/.htpasswd
AuthType Basic
require valid-user
ErrorDocument 401 /error_pages/401.html
AddHandler server-parsed .html
Chú ý:
Upload file .htaccess ở chế độ ASCII thay vì chế độ BINARY hay các chế độ khác do cơ chế chuyển dữ liệu ở các chế độ là khác nhau.Việc cấp quyền truy cập, sử dụng và thực thi file .htaccess có thể gây ra lỗi, cài đặt quyền 755 hoặc quyền thực thi với file.
Comment lại các thông tin cấu hình quan trọng để dễ dàng cho người tiếp quản sau này hoặc cho chính bản thân khi phải cấu hình lại hoặc khắc phục sự cố nào đó.
7. Ý nghĩa ký hiệu định nghĩa trong .htaccess
# : cho phép server bỏ qua dòng này.[F] : Forbidden, hướng dẫn server trả về lỗi 403 cho client.
[L] : Last rule, hướng dẫn server ngừng ghi lại sau khi một chỉ thị đã được xử lý.
[N] : Next, chỉ dẫn cho Apache trả về luật rewrite cho tới khi tất cả các chỉ thị rewrite được hoàn tất.
[G] : Gone, chỉ dẫn server chuyển thông điệp Gone.
[P] : Proxy, chỉ dẫn server sử dụng các request cung cấp bởi mod_proxy.
[C] : Chain, chỉ dẫn server gắn luật trước với luật sau nó.
[R] : Redirect, hướng dẫn Apache đưa ra một chuyển hướng.
[NC] : No case, xác định bất cứ trường hợp nào liên quan tới nó là vô lý (Không thể xảy ra).
[PT] : Pas Through: chỉ dẫn mod_rewrite để vượt qua cơ chế ghi lại URL cho các xử lý xa hơn.
[OR] : Or, là cú pháp logic bình thường (biểu thức kết hợp đúng khi một trong hai biểu thức con của nó đúng).
[NE] : No Escape: hướng dẫn server lọc đầu ra.
[NS] : No Subresquest: hướng dẫn server giữ chỉ thị nếu là một request con từ bên trong.
[QSA] : gắn thêm chuỗi truy vấn vào cuối URL.
[S=x] : Skip: chỉ dẫn server dừng lại x luật.
[E=variable :value (http://variablevalue/)]: Environment Variale: chỉ dẫn server thiết lập giá trị tài nguyên.
[T=MIME-type] : Mime Type cho phép website truy xuất nhiều định dạng file.
[] : xác định một tập các ký tự trong đó bất cứ ký tự nào có trong ngoặc xuất hiện sẽ được match.
[]+ : tập các ký tự trong đó bất cứ kết hợp nào với nó cũng được match.
[a-z] : match với tất cả các ký tự từ a-z, theo bảng chữ cái. Có thể có thêm: [a-zA-Z].
a{n} : xác định số ký tự sẽ mở rộng cùng với ký tự đầu, tức là khi match được ký tự đầu sẽ lấy thêm bao nhiêu ký tự tiếp theo. VD:x{3} sẽ lấy: x’s, xad, …
a{n,} : như a{n} nhưng có thể lấy 3 hoặc nhiều hơn.
a{n,m} : như a{n} nhưng sẽ lấy trong khoảng từ n tới m.
() : nhóm các ký tự lại với nhau, xem chúng như 1 đơn vị đơn lẻ.
^ : ghi chú bắt đầu chuỗi regex.
$ : ghi chú kết thúc chuỗi regex.
? : cho phép chọn lựa ký tự.Ví dụ: monzas? sẽ match với monza hoặc monzas.
! : mô tả một phủ định, sẽ match với tất cả thứ gì khác với các ký tự sau !
. : thể hiện cho bất cứ ký tự đơn nào.
+ : match với một hoặc nhiều ký tự.
* : match với 0 hoặc nhiều ký tự.
| : phép hoặc logic.
\ : thêm vào trước các ký tự đặc biệt để có thể sử dụng chúng như các ký tự bình thường.
.* : không có ký tự nào hoặc nhiều ký tự bất kỳ.
^$ : định nghĩa một chuỗi rỗng.
^.*$ : sử dụng để match mọi thứ.
[^/.] : định nghĩa 1 ký tự là “/” hoặc “.”.
[^/.]+ : định nghĩa bất cứ số lượng ký tự nào chứa “/” hoặc “.”.
http:// : là một chuỗi bình thường.
^domain.* : định nghĩa một chuỗi bắt đầu với “domain”.
^domain\.com$ : xác định sự mở rộng của chuỗi “domain.com”.
-d : kiểm tra nếu chuỗi là một directory.
-f : kiểm tra nếu một chuỗi là một file.
-s : kiểm tra nếu file trong chuỗi kiểm tra có 1 giá trị khác 0.
wiki.matbao.net