web-gelistirme-sc.com

RewriteCond kullanarak bir dizi IP'yi yönlendirin

Şu anda IP 12.345.678.90 dışındaki tüm kullanıcıları aşağıdakileri kullanarak yönlendiriyorum:

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

Bir aralığa izin vermek için hangi sözdizimini kullanırdım? İzin verilenler listemde var:

Allow from 123.45.678.90/28

REMOTE_Host satırını şu şekilde güncellesem işe yarar mıydı?

RewriteCond %{REMOTE_Host} !^12\.345\.678\.90/28
19
xylar

Muhtemelen %{REMOTE_ADDR} ile eşleşmeyi istersiniz, ancak %{REMOTE_ADDR}kelimenin tam anlamıyla uzak adresi olduğundan CIDR gösterimini kullanamazsınız ve buna karşı eşleşmeyi denemek için normal bir ifade kullanabilirsiniz. Öyleyse 123.45.67.89/28, (123.45.67.80 - 123.45.67.95) için şöyle bir şey yapmalısınız:

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

Apache HTTPD 2.4 veya üstünü kullanıyorsanız, REMOTE_ADDR'yi CIDR maskesine göre eşleştirmek için ifadeleri kullanabilirsiniz.

Kısa form şöyle görünür:

RewriteCond expr "-R '192.168.1.0/24'"

Aşağıdaki daha uzun form da mevcuttur, ancak belgeler daha az verimli olduğunu göstermektedir:

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

Bu, örneğinizin tam çözümünü şöyle yapar:

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

Bu eski bir soru olmasına rağmen, hala çok alakalı buluyorum. CIDR gösterimini mümkün kılan bir alternatif aşağıdadır (örnek, bir sanalhost Apache conf dosyasındadır):

<VirtualHost *:80>
    .
    .
    .
    <Files maintenance>
        Require all denied
        Require ip 12.345.678.90/28
    </Files>
    .
    .
    .
</VirtualHost>

Bir sidenote olarak, herhangi bir test yapmadan veya herhangi bir kanıt bulmadan, şüpheli _, bu yöntemin belirtilen RewriteCond expr "-R '192.168.1.0/24'" yöntemlerinden "daha hızlı" olduğunu gösterir.

Bu, basit bir nedenden dolayı, bu yüksek seviyede, daha az hesaplama adımlarının yer aldığı görülmektedir.

N.B. reddedilen bir IP'den gelen bir istekte "Reddedilen İzin" veya "Yasak" türünde bir yanıt göreceksiniz. Bunu, 200/OK ile yanıt veren özel bir 404 sayfasına ekleyerek daha güzel yapabilirsiniz (bu şekilde Google etki alanınızı cezalandırmaz). 200/OK, özel 404 sayfanızın ilk satırı olmalıdır. Örneğin, PHP'de ilk satır şöyle yazardı:

<?php header("Status: 200 OK"); ?>

Bunu yönlendireceğiniz okunaklı bir sayfa için yapmak istersiniz. Gerçek 404'ler, bir ton işe yaramaz arama motoru sonucuyla sonuçlanmamamız için 404'e cevap vermelidir.

1
J-a-n-u-s

Kısmi adres eşleştirmesine izin veren aşağıdakileri kullanmayı seviyorum. virtualHost/htaccess dosyanızda

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]

Umarım yardımcı olur.

0
Roberto Sanchez