it-swarm.com.de

Leiten Sie eine Reihe von IPs mit RewriteCond um

Derzeit leite ich alle Benutzer mit Ausnahme der IP 12.345.678.90 um:

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

Welche Syntax würde ich verwenden, um einen Bereich zuzulassen? In meiner Zulassungsliste habe ich:

Allow from 123.45.678.90/28

Würde es funktionieren, wenn ich einfach die REMOTE_Host-Zeile auf Folgendes aktualisiere:

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

Wahrscheinlich möchten Sie, dass %{REMOTE_ADDR} übereinstimmt, aber Sie können die CIDR-Schreibweise nicht verwenden, da %{REMOTE_ADDR} buchstäblich die Remote-Adresse ist, und Sie können einen regulären Ausdruck verwenden, um zu versuchen, dagegen zu finden. Für 123.45.67.89/28 (123.45.67.80 - 123.45.67.95) müssten Sie also Folgendes tun:

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

Wenn Sie Apache HTTPD 2.4 oder höher verwenden, können Sie expressions verwenden, um REMOTE_ADDR mit einer CIDR-Maske abzugleichen.

Die Kurzform sieht so aus:

RewriteCond expr "-R '192.168.1.0/24'"

Das folgende längere Formular ist ebenfalls verfügbar, die Dokumentation legt jedoch nahe, dass es weniger effizient ist:

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

Das macht die vollständige Lösung für Ihr Beispiel so ähnlich:

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

Obwohl dies eine alte Frage ist, finde ich sie immer noch sehr relevant. Eine Alternative, die die CIDR-Notation zulässt, ist die folgende (Beispiel ist eine Apache-Datei mit virtuellem Host):

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

Als Randbemerkung möchte ich suspect , ohne getestet oder Beweise gefunden zu haben, dass diese Methode "schneller" ist als die genannten RewriteCond expr "-R '192.168.1.0/24'"-Methoden.

Dies ist aus dem einfachen Grund, dass auf dieser hohen Ebene weniger Rechenschritte erforderlich sind.

N.B. Wenn ein Requester von einer IP-Adresse abgelehnt wird, wird eine Antwort vom Typ "Permission denied" oder "Forbidden" angezeigt. Sie können dies schöner machen, indem Sie eine benutzerdefinierte 404-Seite hinzufügen, die mit 200/OK reagiert (auf diese Weise bestraft Google Ihre Domain nicht). Das 200/OK muss die erste Zeile Ihrer benutzerdefinierten 404-Seite sein. In PHP würde die erste Zeile beispielsweise lauten:

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

Sie möchten dies für eine seriöse Seite tun, zu der Sie weiterleiten. Tatsächliche 404er sollten mit 404 antworten, um zu verhindern, dass uns eine Menge nutzloser Suchmaschinenergebnisse auf der Straße enden.

1
J-a-n-u-s

Ich benutze gerne das Folgende, das einen partiellen Adressabgleich ermöglicht. In Ihrer virtualHost/htaccess-Datei

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]

Ich hoffe es hilft.

0
Roberto Sanchez