Đôi khi trong quá trình xây dựng và phát triển website, bạn cần chuyển hướng hoặc chặn truy cập từ một vài IP, 1 vài dải IP hay thậm chí 1 vài quốc gia? Bài viết này hướng dẫn bạn chuyển hướng hoặc chặn truy cập từ IP bằng mod Rewrite (.htaccess).
Chặn truy cập theo IP hoặc dải IP – Deny by IP or IP range:
Đầu tiên chúng ta phải khai báo việc chặn và cho phép trong file .htaccess:
1 2 |
order allow,deny allow from all |
Tiếp theo, chúng ta sẽ khai báo việc chặn truy cập theo IP. Thêm các dòng sau vào giữa hai dòng ta khai báo bên trên:
1 2 3 4 5 |
# Việc chặn này sẽ xuất ra thông báo "403 Forbidden" với những truy cập từ dải IP 1.2 (ví dụ như 1.2.3.4, 1.2.55.69 ... ) # Matches 1.2.*.* Deny from 1.2. # Dòng này chặn chính xác IP 1.2.3.4 (vẫn cho phép truy cập nếu IP khác 1.2.3.4 - chẳng hạn 1.2.3.5 thì vẫn OK :D) Deny from 1.2.3.4 |
Thay đổi 1.2.3.4 với IP bạn muốn chặn. Nếu muốn chặn thêm IP thì chỉ việc thêm 1 dòng tương tự. Mình sẽ ví dụ một file .htaccess chặn vài IP riêng lẻ và 1 vài dải IP demo cho các bạn nhé:
1 2 3 4 5 6 7 8 9 10 |
order allow,deny # Chặn mấy IP riêng lẻ deny from 1.52.133.67 deny from 5.144.176.59 deny from 36.248.168.242 # Chặn mấy dải IP nè deny from 203.191. deny from 222.94. deny from 22.95. allow from all |
Chuyển hướng truy cập dựa vào IP của người truy cập – Redirect visitors based on IP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
RewriteEngine On # Bỏ dấu # ở đầu dòng bên dưới đây nếu vẫn chưa thấy tác dụng # Options +FollowSymlinks # Các mẫu bên dưới sẽ kiểm tra xem IP của người truy cập có giống ta khai báo không. # NC nghĩa là không phân biệt chữ hoa hay thường. Có lẽ là không cần thiết trong trường hợp IP. # Dòng này check nếu IP của người truy cập chính xác là 1.2.3.4 thì chuyển, các trường hợp khác thì không, ví dụ 1.2.3.3 hay 1.2.3.5 thì vẫn OK RewriteCond %{REMOTE_ADDR} 1.2.3.4 [NC,OR] # Check xem có thuộc dải 1.2.*.* # Lưu ý cái dấu chấm cuối cùng nhé, vì nếu không có dấu chấm thì nó check mà cứ có cái dòng 1.2 là nó chuyển, như vậy nếu 1.2.*.* hay 1.20.*.* thì nó chuyển hết. Còn nếu 1.2. thì có nghĩa là chỉ có 1.2.*.* là chuyển, 1.20.*.* hay 1.200.*.* thì OK không chuyển. RewriteCond %{REMOTE_ADDR} 1.2. [NC,OR] # OR - bắt buộc với tất cả các điều kiện, hiểu là HOẶC là điều kiện trên HOẶC điều kiện dưới, tuy nhiên, điều kiện cuối cùng thì không cần OR # tương tự như bên trên, nằm trong dải 1.2.3.*, cũng lưu ý dấu chấm cuối cùng. RewriteCond %{REMOTE_ADDR} 1.2.3. [NC] # RewriteRule <regex to match> <destination> <Flags> # (301) nghĩa là chuyển . # R=302 là chuyển tạm thời. # L nghĩa là đây là điều kiện cuối cùng (nên để) RewriteRule .* https://www.bienthuy.com/cam-truy-cap.htm [R=301,L] |