htaccess toàn tập

Author: - Posted: 06/12/20 - Update: 06/12/20

1. Kiểm tra cấu hình Apache

- .htaccess sẽ chậm hơn httpd.conf. Nếu apache cho phép, nên sử dụng httpd.con thay vì .htaccess
- Mở file: \apache\conf\httpd.conf
- Kiểm tra dòng này có hoạt động không

LoadModule rewrite_module modules/mod_rewrite.so

-> không có dấu # là ok 😀

2. Code mẫu .htaccess

# Bật tính năng Rewrite URL
RewriteEngine On

# Yêu cầu đường dẫn không được có file.
VD: đường dẫn có file .php như sau sẽ không thỏa mãn: http://localhost/frameworkphp/public/index.php
RewriteCond %{REQUEST_FILENAME} !-f

# Yêu cầu đường dẫn không được là thư mục có thật.
RewriteCond %{REQUEST_FILENAME} !-d

# Lệnh RewriteRule: RewriteRule "duong-dan-ao" "duong-dan-that"
# Đường dẫn thật là đường dẫn thư mục đặt file .htaccess. Trong php, thường đặt file .htaccess trong yourdomain/public
# Ví dụ: chuyển mọi đường dẫn đều thêm vào cuối: "index.php"
RewriteRule ^ index.php [L,QSA]

#RewriteRule "duong-dan-ao" "duong-dan-that"
#Vi du, duong dan ao la: "index=html" hoac "../../abc/123/index.html"
#Thi duong dan that la: "public/index.php"
#Tuy nhien "public/index.html" -> "home.php"
RewriteRule "index.html" "public/index.php"
RewriteRule "public/index.html" "home.php"

#([0-9]+) tương ứng với biến $1, ([]) tương ứng với biến $2
RewriteRule "^user-edit/([0-9]+)$" "view/admin/user_edit.php?id=$1"
RewriteRule "^user-edit/([0-9]+)/([])$" "view/admin/user_edit.php?id_sp=$1&ten_sp=$2"

3. Các ký tự dùng riêng của htacess

# Bắt đầu ghi chú
[F] Forrbidden - chỉ định server trả về client lỗi 403
[L] Last rule - Ấn định rằng bước trước đã xong thì ngừng và không tiếp tục lệnh rewrite nữa
[G] Gone - chỉ định server trả về client trang báo lỗi không tồn tại
[NC] No case - Chỉ định match ký tự không phân biệt hoa - thường
[OR] Hoặc
[QSA]  Append Query String: gắn chuỗi truy vấn vào cuối cùng URL
-d Kiểm tra thư mục có tồn tại không.
-f Kiểm tra file có tồn tại không.
-s Kiểm tra file có khác 0 hay không.
-l  Kiểm tra link

4. Regex trong .htaccess

^ Bắt đầu chuỗi Regex
$ Kết thúc chuỗi Regex Ví dụ: ^& : định nghĩa chuỗi rỗng
[] - Tập hợp các ký tự trong đó.
[abc] => chỉ chấp nhận ký tự a hoặc b hoặc c
[a-e] => chỉ chấp nhận ký tự thường từ a đến e, tương tự [abcde]
[F-K] => chỉ chấp nhận ký tự hoa từ F đến K, tương tự [FGHIJK]
[a-zA-Z0-9] => chấp nhận các chữ cái thường, hoa, và số
{} - Xác định chiều dài cho chuỗi
[A-Z]{8} => các ký tự từ A tới Z, dài 8 ký tự
[a-z]{5,10} => các ký tự từ a tới z, dài từ 5 đến 10 ký tự
[0-9]{2,} => ký tự số, dài ít nhất 2 ký tự

. - Bất cứ ký tự đơn nào
.{10,20} => chuỗi ký tự bất kỳ, dài từ 10 đến 20 ký tự
+ - Từ 1 ký tự trở lên, tương tự {1,}
[a-z]+ => chuỗi các ký tự chữ cái thường, có ít nhất 1 ký tự
* - Có 0 hoặc nhiều ký tự, tương tự {}
[A-Z]* => chuỗi các ký tự chữ cái thường, dài từ 0 ký tự trở lên
.*  => không có ký tự nào hoặc nhiều ký tự bất kỳ.
^.*$ => sử dụng match với mọi thứ
? - Có 0 hoặc 1 ký tự, tương tự {0,1}
[a-z]? => chuỗi các ký tự chữ cái thường, có ít nhất 1 ký tự
[^] - Ngược lại với []
[^a-z]{5,10} => chuỗi dài từ 5 đến 10 ký tự, nhưng không có cữ cái thường từ a-z nào
[^abc]{} => so khớp với chuỗi không chứa chữ cái a,b và c
() - Nhóm các ký tự thành 1 nhóm
| - Hoặc
(a|b) => ký tự a hoặc b
(duycode|htaccess) => chuỗi duycode hoặc htaccess
\ - Dùng để đặt trước các ký tự đặc biệt
\\ => ký tự \
\. => ký tự .
! Phủ định

5. Những lỗi do file htaccess thường gặp

301 - Moved Permanently: 302 - Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.
400 – Bad request (Lỗi request)
401 – Authorization Required (lỗi xác thực user,password)
403 – Forbidden (không được vào, trang bị cấm)
404 – Wrong page (lỗi trang, không tìm thấy…)
500 – Internal Server Error (lỗi server)

6. Function PHP sửa URL

- Ta có đường dẫn: https://duycode.com/Hãy Cho Tôi Năm Nghìn
- Chuyển thành: https://duycode.com/hay-cho-toi-nam-nghin