Mit .htaccess bestimmte IPs umleiten
Mathias Wagner
- webserver
Hallo
ich habe auf meinem Rechner einen Apache 1.3.x laufen. Der soll auch von außen erreichbar sein, damit die Agentur (feste IP) immer auf dem laufenden sein kann. Ich habe in der root .htaccess bisher ein
Deny from all
Allow from 127.0.0.1
Allow from 192.168.0.3
stehen. Wie kann ich mit .htaccess ungefähr sowas machen: das deny from all soll raus und alle IPs die nicht speziell angegeben werden werden landen nicht im root, sondern z.B. in /www/alleAnderen. Ich möchte die Lösung nicht mit PHP/Perl machen, da das ein rießen Aufwand ist, und auch sehr fehlerhaft ist. Gibt es überhaupt eine Lösung mit .htaccess? Danke.
Hallo Mathias,
Gibt es überhaupt eine Lösung mit .htaccess?
Du könntest über mod_rewrite arbeiten, indem Du mit
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
RewriteCond %{REMOTE_ADDR} !^192.168.0.3$
RewriteRule (.*) www/alleAnderen/$1 [L,QSA]
arbeitest (oder so ähnlich, bin mir aus dem stehgreif nicht sicher, ob die Syntax 100% korrekt ist), allerdings verstehe ich eins nicht:
Das ganze ist doch bei Dir lokal auf dem Rechner, richtig? Warum modifizierst Du dann nicht die httpd.conf und fügst einen IP-basierten virtuellen Host hinzu?
Viele Grüße,
Christian
Moin!
ich habe auf meinem Rechner einen Apache 1.3.x laufen. Der soll auch von außen erreichbar sein, damit die Agentur (feste IP) immer auf dem laufenden sein kann.
Du hast doch aber keine statische IP. Was hindert dich also, für den Zugriff von außen einen Service wie dyndns.org zu verwenden und dann die Zugriffe von außen auf einen komplett anderen virtuellen Host zu leiten (namensbasiert). Dann hast du zumindest schon mal die Trennung zwischen privatem eigenen Zugriff und Zugriff von außen.
Und wenn dann nicht alle IPs draufkommen sollen, wird der virtuelle Host eben auch gesperrt für alle bis auf Ausnahmen.
Ich würde für sowas übrigens .htaccess immer soweit wie möglich vermeiden. Wenn du die Möglichkeit hast, diese Konfiguratioen in der zentralen Datei httpd.conf zu machen, dann nutze sie. Außerdem sind nicht alle Konfigurationsmöglichkeiten mit .htaccess realisierbar.
- Sven Rautenberg
Du hast doch aber keine statische IP. Was hindert dich also, für den Zugriff von außen einen Service wie dyndns.org zu verwenden und dann die Zugriffe von außen auf einen komplett anderen virtuellen Host zu leiten (namensbasiert).
Dyndns verwende ich bereits. Aber ich weiß jetzt nicht wie ich die Zugriffe von außen auf den virtuellen Host umleite.
Moin!
Du hast doch aber keine statische IP. Was hindert dich also, für den Zugriff von außen einen Service wie dyndns.org zu verwenden und dann die Zugriffe von außen auf einen komplett anderen virtuellen Host zu leiten (namensbasiert).
Dyndns verwende ich bereits. Aber ich weiß jetzt nicht wie ich die Zugriffe von außen auf den virtuellen Host umleite.
Namensbasierte virtuelle Hosts nehmen.
Das erfordert mindestens die Angabe von ServerName im <VirtualHost>-Bereich,.
- Sven Rautenberg
Das erfordert mindestens die Angabe von ServerName im <VirtualHost>-Bereich
OK. Ich habe folgendes eingetragen:
<VirtualHost hsserver.dyndns.org>
ServerAdmin mail@mathias-wagner.info
DocumentRoot e:/www/internet
ServerName hssserver.dyndns.org
ErrorLog logs/internet_error_log
CustomLog logs/internet_access_log common
</VirtualHost>
Wenn man aber jetzt von außen zugreifen will, dann kommt immer noch AccesDenied aus dem www Verzeichnis, obwohl im internet Verzeichnis eine .htaccess mit Allow from all steht. D.h. es wird offenbar nicht in das internet Unterverzeichnis umgeleitet.
Daher habe ich versucht hsserver.dyndns.org durch die interne Adresse meines Routers zu ersetzen. Das hat auch nichts gebracht. Ein direkter Aufruf mit http://hsserver.dyndns.org/internet/ geht.
Und ich selbst kann von meinem Netzwerk aus immer noch nicht zugreifen :(. Anpingen geht.
Ok ich habe jetzt herausgefunden, dass der Slash gefehlt hat, mein Fehler: DocumentRoot e:/www/internet/
Jetzt geht es über dyndns. Allerdings laufen dafür alle Anfragen von mir über localhost ins Leere.
Moin!
Ok ich habe jetzt herausgefunden, dass der Slash gefehlt hat, mein Fehler: DocumentRoot e:/www/internet/
Jetzt geht es über dyndns. Allerdings laufen dafür alle Anfragen von mir über localhost ins Leere.
Wenn du einen virtuellen Host einsetzt, solltest du für alle Aufgaben virtuelle Hosts definieren. Ist zumindest aufgrund der Einheitlichkeit schöner - und wenn ich mich recht erinnere, ist der erste virtuelle Host ohnehin der Standardhost, wenn kein passender Hostname gefunden wird, dem der Request zugeordnet werden kann.
Mit anderen Worten: Nimm 2.
- Sven Rautenberg