Sử dụng htaccess giúp tạo nhiều chức năng hữu ích cho website như cấu hình Apache, bảo mật, giả địa chỉ. cấm theo ip/giờ, báo lỗi thân thiện…
Bạn có thể tạo nhiều file htaccess trong một website, mỗi lệnh trong file này là một chỉ thị để yêu cầu webserver Apache thực hiện một việc gì đó. Các lệnh trong file htaccess sẽ ảnh hưởng đến folder chứa file htaccess và các folder con, (không ảnh hưởng đến folder cha)
Các lệnh thường dùng trong file htaccess
1. Khai báo trang mặc định trong htaccess
Lệnh DirectoryIndex là lệnh dùng để khai báo trang web mặc định cho Apache.
DirectoryIndex tc.php
Nếu user khi request mà không nói rõ tên file (chỉ có tên folder) thì file mặc định sẽ chạy. Ví dụ user request địa chỉ như sau là không có tên file: https://longnv.name.vn/lap-trinh-php/ , khi đó file tc.php trong folder lap-trinh-php sẽ thực thi.
2. Khai báo bảng mã
Lệnh AddDefaultCharset dùng để thông báo cho trình duyệt về bảng mã cần dùng để hiện text trong trình duyệt. Lệnh này rất hữu ích, vì bạn không cần khai báo bảng mã bằng tag meta trong từng trang nữa.
AddDefaultCharset UTF-8
3. Cấm hiện danh sách file
Sử dụng htaccess cấm apache hiện danh sách file đễ tăng tính bảo mật cho website. Là bởi vì khi user request một folder mà folder đó không có trang mặc định, apache sẽ liệt kê các file ra. Hoạt động này rất không tốt (không bảo mật). Bạn nên cấm bằng lệnh Options –Indexes

Options -Indexes
4. Bật tắt chế độ chuyển địa chỉ
Lệnh dùng để bật tắt chế độ chuyển địa chỉ của apache là rewriteengine
RewriteEngine on | off
5. Lệnh chuyển địa chỉ
Sử dụng htaccess để chuyển địa chỉ giả thành địa chỉ thật là hoạt động phổ biến nhất trong htaccess. Bạn sẽ dùng lệnh rewriterule để chuyển địa chỉ, nó giúp điều chỉnh địa chỉ giả của một url thành địa chỉ thật, giúp địa chỉ đẹp hơn, có giá trĩị nhiều cho SEO.
RewriteRule pattern url [flag]
Trong đó pattern là mẫu theo cú pháp regex diễn tả địa chỉ giả , url là địa chỉ thật, flag là cờ xử lý.
+ pattern: là một regular expression để so khớp với URL hiện hành
. Diễn tả 1 ký tự bất kỳ
[chars] lớp ký tự (một trở đi)
text1|text2 text1 hoặc text2
? 0 hoặc 1 của text phía trước
* 0 hoặc nhiều lần text phía trước
+ 1 hoặc nhiều lần text phía trước
(text) Nhóm ký tự
^ Diễn tả sự bắt đầu
$ Diễn tả vị trí cuối
\char escape từng ký tự đặc biệt: ".[]()"
Ký tự ! có thể được dùng trước parttern đễ diễn tả ý nghĩa phủ định
+ flags là cờ chỉ định cách hoạt động của chỉ thị này:
[R] (force Redirect) Yêu cầu trình duyệt tạm chuyển hướng tới 1 địa chỉ khác.
[F] (force URL to be Forbidden) Điều khiển URL hiện tại thành forbidden. Nó gởi HTTP response, 403 (FORBIDDEN).
[L] (last rule) Điều khiển quá trình rewrite dừng lại ở rule này
[NC
] (no case) Không phân biệt chữ hoa thường
+ url là quy tắc thay thế cho địa chỉ gốc do client request. Trong url có thể dùng các server variables hoặc “tham khảo ngược %N” tới pattern của rewrite rule
VÍ DỤ:
- Chuyển địa chỉ 1 loại tin
RewriteRule ^songdep/$ home.php?view=cat&idloai=12 [L] RewriteRule ^thohay/$ home.php?view=cat&idloai=28 [L]
Chú ý: url không được trùng với tên file có thật trong website, và trong trang chủ phải thêm tag:
<base href="http://<?=$_SERVER['SERVER_NAME'];?>/<folder>/" />
- Backreference
RewriteRule ^news/(.*).html$ home.php?view=news&tieude_KhongDau=$1
RewriteRule ^cat/(.*)/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=$2 [L]
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=1 [L]
RewriteRule ^search/(.*)/$ home.php?view=search&tukhoa=$1 [L]
- Đổi tên mở rộng php
RewriteRule ^(.*)\.tto$ $1.php
- Chuyển hướng tới địa chỉ khác
RewriteBase /PHP2_htaccess/ RewriteRule ^music/(.*) nhac/$1 [R]
- Cấm xem 1 địa chỉ
RewriteRule ^Aa\.php$ - [F,NC]
Chú ý: Khi dùng rewriterule thì địa chỉ giả diễn tả trong pattern không được trùng với tên file có thật trong website, và trong trang chủ cần thêm tag base như sau:
<base href="http://<?=$_SERVER['SERVER_NAME'];?>/<folder>/" />
6. Lệnh RewriteCond
RewriteCond %{ Server_variable } pattern [flags]
Là lệnh để định nghĩa một điều kiện, lệnh này đặt trước RewriteRule để làm điều kiện cho RewriteRule.
+ flags là cờ đặt sau parttern để điều khiển hoạt động của chỉ thị này. Bao gồm:
[nocase
| NC] : khớp pattern với url không phân biệt chữ hoa thường
[ornext | OR] : Sử dụng để kết hợp với điều kiện phía sa
+ pattern là regexp để so khớp với URL hiện tại, pattern cũng có thể gồm các ký hiệu sau:
-d (is directory) : Kiểm tra đường path có phải là folder hay không
-f (is regular file): Kiểm tra đường path có phải là 1 file có thực hay không
+ Server_variable gồm các giá trị:
HTTP_USER_AGENT HTTP_REFERER HTTP_HOST REQUEST_URI REQUEST_FILENAME | REMOTE_ADDR REMOTE_HOST REQUEST_METHOD SCRIPT_FILENAME QUERY_STRING | DOCUMENT_ROOT SERVER_NAME SERVER_ADDR SERVER_SOFTWARE |
TIME_YEAR TIME_MON TIME_DAY | TIME_HOUR TIME_MIN TIME_SEC |
Ví dụ lệnh RewriteCond
- Căn cứ theo giờ server
RewriteCond %{TIME_HOUR}%{TIME_MIN} >1900 [OR]
RewriteCond %{TIME_HOUR}%{TIME_MIN} <0700
RewriteRule (.*) index_dem.php [L]
7. Lệnh AuthName, AuthType, AuthUSerFile:
Các lệnh này dùng để bảo vệ folder bằng mật khẩu. Để thực hiện, bạn tạo một file .htaccess đặt trong folder bạn muốn bảo vệ rồi thêm những lệnh sau:
AuthName "Phan quan tri"
AuthType Basic
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Có thể thay Phan quan tri thành text bất kỳ, /full/path/to là đường dẫn đến file chứa user và mật khẩu. File .htpasswd chứa nhiều dòng, mỗi dòng chứa user và password của user
username:password
VÍ DỤ:
- Tạo file quantri/.htaccess
AuthName "Phan quan tri" AuthType Basic AuthUserFile e://xampp/htdocs/PHP2_htaccess/quantri/.htpasswd Require valid-user
- Tạo file quantri/.htpasswd
luom:1
8. Chỉ thị ErrorDocument
ErrorDocument MãLỗi full/path/to/FileThongBao.html
Bạn có thể sử dụng htaccess để có các thông báo lỗi thân thiện với người dùng. Lệnh ErrorDocument giúp thực hiện việc nàt, trong đó FileThongBao.html là trang web mà bạn muốn hiển thị khi lỗi phát sinh, MãLỗi là một số nguyên. Các mã lỗi http thường gặp là :
400 – Bad request (Lỗi do yêu cầu)
401 – Authorization Required (cần password để truy nhập)
403 – Forbidden (không được vào)
404 – Wrong page (lỗi trang* không tìm thấy…)
500 – Internal Server Error (lỗi server)
VD: Câu lệnh sau trong .htaccess:
ErrorDocument 404 /PHP2_htaccess/error/loi404.html
Khi gặp lỗi không tìm thấy file, browser sẽ tự động chuyển đến trang loi.404.html
Có cách viết thông báo lỗi bằng cách gõ trực tiếp thông báo như sau:
ErrorDocument 404 "No such document here"
9. Chỉ thị deny, allow
Sử dụng htaccess còn giúp bạn cấm/cho phép các ip truy cập website, hay là cấm/cho phép sử dụng theo giờ trong ngày. Bằng cách sử dụng các lệnh allow và deny, bạn có thể thực hiện được. Sau đây là một số ví dụ:
- Cấm IP, dùng lệnh :
deny from 192.168.8.1
- Cho phép IP, dùng lệnh:
allow from 00.00.00.00
- Cấm tất cả IP, dùng lệnh
deny from all
- Chỉ cho phép một số IP truy cập:
order deny,allow
deny from all
allow from IP
allow from 203.162.*
- Cấm một số ip truy cập:
order allow,deny
allow from all
deny from IP
deny from 203.162.*
Hai đoạn code trên rất hữu dụng với các WebMaster trong việc bảo mật.Nó sẽ ngăn không cho các IP không hợp lệ vô trang Admin
10. Tham khảo thêm
Lab sử dụng htaccess
1. Chuẩn bị
Tạo folder: Trong htdocts, tạo folder PHP2_htaccess, các folder con và các file như sau: (hình tự tìm trên mạng + các file .php thì nhập nội dung giống như tên file nhưng có dấu)
PHP2_htaccess .htaccess tinxemnhieu.php tinnoibat.php tin_tc.php action.php Images h1.jpg h2.jpg Libs functions.php ham.php private sales.php
1. Trong file .htaccess, viết lệnh để khi user request file .abc thì đổi thành file tương ứng có đuôi .php

2. Viết lệnh cấm liệt kê các file trong folder khi không có file mặc định

3. Viết lệnh để chỉ định trang mặc định trong folder là trangchu.php

Tự test nhé
4. Viết lệnh yêu cầu trình duyệt sử dụng bảng mã utf-8 khi hiện text

Tự test nhé
5. Viết lệnh để tạo địa chỉ đẹp (tùy ý) cho 2 file tinxemnhieu.php và tinnoibat.php (dùng lệnh RewriteRule)
6. Viết lệnh để cấm request file action.php

7. Trong khoảng thời gian từ 21 giờ đến 6 giờ sáng, nếu user request bất cứ file nào trong folder private thì chuyển đến trang inx_dem.php ( trang index_dem.php có nội dung: Ban đêm không làm việc nhé)
8. Tạo trang loi404.html và nhập nội dung thông báo + định dạng cho đẹp. Và viết code để khi user request 1 file không tồn tại sẽ chuyển đến trang loi404.html
9. Trong folder Libs, tạo mới 1 file htaccess và viết lệnh cấm user request vào các file trong folder này (lệnh deny)
10. Tạo 1 route http://localhost/PHP2_htaccess/thong-tin-sinh-vien/ , dẫn người xem vào trang sinhvien.php. Nhập thông tin sinh viên vào trang gồm họ tên, email , điện thoại, hình (file hình đặt trong folder images)