Định nghĩa .htaccess là gì và nằm ở đâu?
.htaccess là gì? .Htaccess là một tập tin dùng để cấu hình máy chủ web apache. Nó được máy chủ chấp nhận như là một thành phần và cho phép chúng ta thực hiện điều hướng và bật các tính năng một cách linh hoạt hoặc bảo vệ một phần nào đó của website. Trong cái tên .htaccess thì htaccess là phần đuôi và tập tin này là không có tên (noname), chính vì thế khi bạn đưa file này lên host không phải lúc nào nó cũng hiển thị ra.
Để thao tác với file .htaccess ta có thể sử dụng bất kì một editor nào hỗ trợ code text như Netbeans, PHP Designer, hay thậm chí là phần mềm notepad có sẵn trong window. File .Htaccess không được viết nên từ một ngôn ngữ lập trình nào, nó được viết bởi những quy tắc Regular Expression nên nếu bạn không nắm vững kiến thức này thì thao tác với file .htaccess rất khó khăn. Và nếu bạn chỉnh sửa file với một lỗi dù chỉ là nhỏ thì khi truy cập vào website của bạn sẽ xuất hiện lỗi 500, như vậy là bạn đã HACK được web mình rồi đấy. Vì thế hãy thận trọng khi chỉnh sửa file .htaccess và hãy luôn luôn có một file backup trước khi đụng đến.
Thông thường thì file này thường nằm ngay ở trong thư mục gốc của hosting. Bạn có thể dễ dàng thấy ở trong thư mục gốc của hosting của bạn có chứa file này.
Bạn cần lưu ý gì khi sử dụng .htaccess?
- Phải đảm bảo file .htaccess được bảo mật một cách nhất định, để tránh nhưng kẻ xấu lợi dụng nó.
- Cần lưu lại một file .htaccess trước khi tiến hành chỉnh sửa. Nếu có trục trặc xảy ra vẫn có thể khôi phục lại.
- Nếu như người dùng không nắm rõ hoặc có sơ suất trong quá trình cấu hình đều có thể khiến website của bạn có thể không hoạt động hoặc không như ý muốn của người dùng như trước.
Những ký hiệu thường dùng của .htaccess là gì?
Để hiểu ra và làm tốt vấn đề này trong htaccess, bạn phải có kiến thức về Regular Expression. Trong khuôn khổ bài viết này, Semtek sẽ không giới thiệu lại Regular Expression nữa. Mặc định các bạn đã có kiến thức này rồi.
Semtek sẽ giới thiệu luôn về qui tắc viết biểu thức điều kiện trong htaccess
1. 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
2. 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ố3. 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ên4. Ký hiệu ^ và $ .htaccess
^ 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ự.
^framgia$ => Chuỗi cố định là framgia
^framgia[a-z]{2} chuỗi bắt đầu bằng framgia và kết thúc là 2 ký tự thường
5. Ký hiệu dấu chấm (.)**
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ự
6. Ký hiệu + ?, ***
- Dấu + : xác định chiều dài 1 hoặc nhiều ký tự
- Dấu ? : xác định chiều dàu 0 hoặc 1 ký tự
- Dấu * : xác định chiều dài từ 0 hoặc nhiều 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ự7. 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 thành 1 nhóm
8. 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à c9. Ký hiệu |
Đây là toán tử OR trong Regular Expression, có ý nghĩa Regex A hoặc Regex B
(a|b) => là ký tự a hoặc b
(framgia|viblo) => chuỗi framgia hoặc viblo
10. 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.
\. => 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
11. Capturing GROUP
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. .htaccess
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).
Tính năng cơ bản của .htaccess là gì?
1. Chống ăn cắp tài nguyên và băng thông
Tính năng này giúp khách hàng có thể chủ động trong việc chia sẻ tài liệu, hình ảnh trên các website khác, để tránh gây lãng phí băng thông có thể thêm phần sau vào file .htaccess :
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule .* – [F]
Khách hàng có thể thêm các trang web muốn chia sẻ tài liệu, hình ảnh hoặc chỉ cho mình trang web của khách hàng bằng cách thêm dòng RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] và sửa “yourdomain.com” thành domain khách hàng muốn chia sẻ.
2. Chặn ip truy cập
Khách hàng có thể tự cấu hình chặn các ip hoặc domain bằng cách thêm dòng sau vào file .htaccess :
<Limit GET POST PUT>
order allow,deny
allow from all
deny from x.y.z.v
deny from .*domain\.com.*
</Limit>
Khách hàng có thể tự thêm các ip hoặc domain muốn chặn bằng cách thêm dòng deny from x.y.z.v hoặc deny from .*domain\.com.* trong đó x.y.z.v là ip và domain.com là tên miền muốn chặn.
3. Cấu hình chuyển hướng trong .htaccess
Khách hàng có thể tự cấu hình chuyển bằng cách thêm các dòng sau vào file .htaccess :
Đối với việc chuyển hướng file khách hàng thêm như sau :
redirect 301 /old/old.htm
Ví dụ trên cho khách hàng chuyển hướng file old.htm nằm trong thư mục old tới đường dẫn với lỗi 301 là di chuyển vĩnh viễn.
Đối với việc chuyển toàn bộ website sang tên miền mới khách hàng thêm như sau :
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ [L,R=301,NC]
Cách sử dụng .htaccess redirect www sang non-www và ngược lại
Thông thường người ta thích url có www, và sử dụng .htacess để trỏ tất cả url từ non-www về www như sau
1. Thông thường người ta thích url có www, và sử dụng .htacess để trỏ tất cả url từ non-www về www như sau:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^kiemtraip.com [NC]
RewriteRule ^(.*)$ [L,R=301]
Thông số $1 ở dòng cuối cùng rất quan trọng, nó sẽ giữ nguyên địa chỉ url cho bạn và chỉ loại bỏ www:
sẽ được redirect về:
2. Ngược lại, nếu không muốn có www thì có thể redirect từ www về non-www như sau trong file public_html/.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.semtek.com.vn [NC]
RewriteRule ^(.*)$ [L,R=301]
Tương tự như trường hợp số 1, chúng ta cũng phải bao gồm $1 ở dòng cuối cùng để url chính được bảo toàn:
sẽ được redirect về:
Trong cả 2 trường hợp, thông số 301 rất quan trọng, nó có ý nghĩa là redirect permanent (đổi địa chỉ vĩnh viễn), do vậy không được bỏ thông số này đi.
3. Sự giống nhau và không giống nhau
Hầu hết các website, địa chỉ có www hoặc không có www đều trỏ đến cùng 1 website. Tuy nhiên bạn có thể sử dụng địa chỉ www cho 1 website, và không có www (non-www) cho 1 website khác bằng cách cấu hình bản ghi trong phần quản lý tên miền. .htaccess
4. Sử dụng địa chỉ có www hay không có www?
Thông thường máy tìm kiếm (Search engine) đều hiể địa chỉ www và không có www là 2 địa chỉ khác nhau, và mỗi địa chỉ có thể có page rank khác nhau. Nếu sử dụng cả 2 (mà không redirect 301) thì đương nhiên thứ hạng của địa chỉ đó bị giảm đi so với sử dụng 1 địa chỉ chính và redirect 301 địa chỉ còn lại.
Để SEO tốt hơn thì bạn nên chọn 1 địa chỉ để sử dụng. Sử dụng địa chỉ có www hoặc không có www mang tính cá nhân chứ không phải lý do kỹ thuật.
5. Lý do sử dụng www và non-www:
- Sử dụng địa chỉ có www: Nó giúp nhận diện địa chỉ như 1 địa chỉ web (điển hình là trong file MS Word, nếu bao gồm www thì word có thể tự nhận dạng đó là địa chỉ, nếu không có www thì phải bao gồm http:// MS Word mới nhận dạng được), đặc biệt khó nhận dạng khi tên miền có đuôi mở rộng không phải là .com, .net, .info…
- Sử dụng địa chỉ không có www (non-www): Giúp địa chỉ ngắn hơn, đặc biệt là với sub-domain. Lý do tiếp theo là www thực sự không cần thiết. Nhiều người cảm thấy không có www giúp địa chỉ web nhìn rõ ràng hơn.
Nếu tên miền dài thì nên bỏ www, vì nếu gắn cả www thì tên miền sẽ rất dài.
Chỉ nên sử dụng 1 trong 2 phiên bản có www và không có www.