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
1 2 3 4 5 6 |
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !f RewriteCond %{REQUEST_FILENAME} !d #RewriteRule ^ index.php [L,QSA] |
# 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
1 2 3 4 5 6 7 8 9 10 11 12 |
function makeURL($string){ $string=trim($string); $string=str_replace(' ','-',$string); $string=strtolower($string); $string=preg_replace('/(ù|ú|ủ|ũ|ụ|ư|ừ|ứ|ử|ữ|ự)/','u',$string); $string=preg_replace('/(è|é|ẻ|ẽ|ẹ|ê|ề|ế|ể|ễ|ệ)/','e',$string); $string=preg_replace('/(ò|ó|ỏ|õ|ọ|ô|ồ|ố|ổ|ỗ|ộ|ơ|ờ|ớ|ở|ỡ|ợ)/','o',$string); $string=preg_replace('/(à|á|ả|ã|ạ|ă|ằ|ắ|ẳ|ẵ|ặ|â|ầ|ấ|ẩ|ẫ|ậ)/','a',$string); $string=preg_replace('/(ì|í|ỉ|ĩ|ị)/','i',$string); $string=preg_replace('/đ/','d',$string); return $string; } |