Đô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:
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:
# 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é:
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 :
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]