2012-07-25 18 views
17

Hiện nay tôi đang chuyển hướng tất cả người dùng ngoại trừ IP 12.345.678.90 sử dụng:Chuyển một loạt các khu công nghiệp sử dụng RewriteCond

RewriteEngine On 
RewriteCond %{REQUEST_URI} !/maintenance$ 
RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90 
RewriteRule $ /maintenance [R=302,L] 

cú pháp Những gì tôi sẽ sử dụng để cho phép một loạt? Trong tôi Danh sách cho phép tôi có:

Allow from 123.45.678.90/28 

Nó sẽ làm việc nếu tôi chỉ cập nhật các dòng REMOTE_HOST tới:

RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90/28 

Trả lời

19

Có thể bạn muốn %{REMOTE_ADDR} để phù hợp chống lại, nhưng bạn không thể sử dụng ký hiệu CIDR như %{REMOTE_ADDR}theo nghĩa đen là địa chỉ từ xa và bạn có thể sử dụng cụm từ thông dụng để cố gắng đối sánh với nó. Vì vậy, đối 123.45.67.89/28, (123.45.67.80 - 123.45.67.95), bạn sẽ phải làm một cái gì đó như thế này:

RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.8[0-9]$ 
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.9[0-5]$ 
12

Nếu bạn đang sử dụng Apache HTTPD 2.4 hoặc mới hơn, bạn có thể sử dụng expressions để đối sánh REMOTE_ADDR với mặt nạ CIDR.

Dạng ngắn trông như thế này:

RewriteCond expr "-R '192.168.1.0/24'" 

Hình thức còn sau đây cũng có sẵn, nhưng các tài liệu cho thấy nó là kém hiệu quả:

RewriteCond expr "%{REMOTE_ADDR} -ipmatch '192.168.1.0/24'" 

Điều đó làm cho các giải pháp đầy đủ để ví dụ của bạn một cái gì đó như thế này:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !/maintenance$ 
RewriteCond expr "! -R '12.345.678.90/28'" 
RewriteRule $ /maintenance [R=302,L] 
+0

Câu hỏi: Bạn có thể đưa ra ví dụ cho biểu mẫu ngắn không? Không rõ nó tham chiếu đến '% {REMOTE_ADDR}' như thế nào, trong khi '% {REMOTE_ADDR}' được ghi chú rõ ràng ở dạng dài hơn. – plusjeff

+0

@plusjeff Tôi không chắc chắn những gì bạn có nghĩa là - ví dụ về các hình thức ngắn được bao gồm ở trên. Từ tài liệu được liên kết, -R là 'Giống như"% {REMOTE_ADDR} -ipmatch ... ", nhưng hiệu quả hơn'. – zts

+0

Có phải '-R' trong dạng đại diện ngắn của'% {REMOTE_ADDR} 'không? Nếu vậy, làm thế nào để sử dụng biểu mẫu ngắn hiệu suất cao để kiểm tra biến khác (tức là tôi muốn kiểm tra biến có tên là '% {CLIENT_IP}' với dạng ngắn? Nếu tôi sử dụng một biến khác, tôi luôn phải Sử dụng dạng dài hơn? – plusjeff

0

Tôi thích sử dụng các mục sau cho phép đối sánh địa chỉ một phần. Trong số virtualHost/htaccess tệp

SetEnvIf HOST "siteYouAreworkingON.com" ACCESS_CONTROL<br> 
SetEnvIf Remote_Addr "list of full or partia ipadresses separated by |"<br> 
RewriteCond %{ENV:ACCESS_CONTROL} 1<br> 
RewriteRule .* http://gohere.instead [L,R] 

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan