Camping_RIDER: Weiterleitung / Cloaking

Beitrag lesen

Aloha ;)

Im Wiki habe ich zwar gelesen, dass "allow" nicht definiert ist (?), aber bei Google gibt's das (inzwischen?) schon. Ist es dann so OK?

Allow macht halt keinen so rechten Sinn, denn es ist ja gerade der Sinn einer robots.txt etwas zu verbieten, erlaubt ist per se ja alles, was nicht verboten ist (zumindest in der Denke einer Suchmaschine :D).

Trotzdem, wie gesagt. robots.txt ist nicht standardisiert, und wenn Google was Bestimmtes interpretiert und du Wert auf Googles Behandlung deiner Seite legst, spricht nichts dagegen das auch zu benutzen.

Ich denke ich verstehe, was du allgemein übers Abbiegen schreibst, kann in meinem Beispiel aber nicht nachvollziehen, was in meinem Fall abläuft.

Kein Ding, ich klamüser dir das auseinander. Weiterführende Lektüre mit Syntax und allen verfügbaren Befehlen: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

<IfModule mod_rewrite.c>

Wenn das rewrite-Modul im Apache-Server verfügbar ist...

RewriteEngine On

Starte den Umleitungs-Sklaven :)

RewriteRule ^index\.php$ - [L]

RewriteRule erwartet einen regulären Ausdruck, mit dem die aufgerufene Addresse verglichen wird, dann eine Addresse, zu der im Match-Fall umgeleitet wird, und dann optional Flags.

Im Einzelnen:

^index\.php$

Dieser Ausdruck passt auf alle Aufrufe, deren (zum Domain-Root relativer) URI mit index.php beginnt (^) und endet ($). Der Backslash dient lediglich der Maskierung des ".", der in regulären Ausdrücken ansonsten eine Spezialbedeutung hätte.

-

Hier würde normalerweise die URL stehen, auf die intern umgeleitet wird. Hier steht ein "- (dash)", das bedeutet quasi "tu nichts". Im Klartext werden also Aufrufe, die direkt an /index.php gehen, eben NICHT umgeleitet, sondern durch diese Regel extra von der Umleitung ausgenommen.

[L]

Das L-Flag bedeutet: "Wenn die Regel zutrifft, überprüfe keine weitere Regel mehr - beende den Rewrite-Prozess sofort". Das ist nötig, um eben genau zu erreichen, dass die erste Regel eine Ausnahme von der zweiten ist (denn wenn die erste passt sorgt dieses Flag dafür, dass die zweite nicht angewandt wird).

RewriteRule (.*) ./index.php?id=$1 [L]

Okay. Wenn diese Regel zur Anwendung kommt, dann ist die Addresse nicht /index.php gewesen (Erklärung siehe oben).

Der Reguläre Ausdruck ist

(.*)

Das heißt jedes beliebige Zeichen (.) unendlich oft hintereinander (*), matcht also schlicht und ergreifend ALLES. Die Klammern sorgen dafür, dass der Server sich den gematchten Ausdruck intern "merkt", damit man ihn nachher wiederverwenden kann.

Jede Klammer bedeutet eine Variable die man später verwenden kann, und zwar mit $1, ..., $9

Umgeleitet wird auf...

./index.php?id=$1

...das Skript index.php (das wir aus diesem Grund mit der ersten Regel ausnehmen mussten, weil ansonsten Endlosschleife und so). Desweiteren geben wir dem Skript einen GET-Parameter namens "id" mit und füllen ihn mit der ursprünglich aufgerufenen Addresse (die ja dank der Klammern im regulären Ausdruck in $1 gespeichert ist).

Zu guter Letzt folgt wieder das L-Flag, das hier dafür sorgt, dass auf keinen Fall eine weitere Regel "dazwischenfunkt". Könnte man an der Stelle imho aber auch weglassen.

</IfModule>

Naja. Ende vom IF eben ;)

Es ist doch alles im gleichen Folder. Man kommt über einen Link wie http://www.meineDomain.net/go/parameterxyz zum Redirect-Script index.php. Was ändert sich durch RewriteRule... daran? Oder was verbessert sich dadurch bzgl. der Sicherheit?

Naja, RewriteRule hat den Vorteil, dass es keine wirkliche Umleitung, sondern nur eine Art interne Umleitung ist. Der User bleibt mit dem Browser (anders als bei einer wirklichen Umleitung) auf der Addresse, die er aufgerufen hat. Die Ausgabe wird aber intern durch index.php generiert (und nicht durch ein statisches File http://www.meineDomain.net/go/parameterxyz wie der User vermuten würde) - dass ein "index.php" tätig wird, bekommt der User also gar nicht mit.

Das ist einerseits ein Sicherheitsfeature (wenn alle Aufrufe durch ein PHP-Skript laufen müssen, bei dem Sicherheitsabfragen vorgenommen werden können), andererseits ein Komfortfeature (der User muss nicht http://www.meineDomain.net/files/id1123462354.html im Browser öffnen, sondern hat eine schöne URL http://www.meineDomain.net/Katzen/Bilder, obwohl da inhaltlich auch nur das durch index.php gemapte http://www.meineDomain.net/files/id1123462354.html drinsteckt).

Außerdem nützt es der Sicherheit gemäß dem Konzept Security by Obscurity, da ein potenzieller Angreifer von deinen URLs nicht auf die Dateistruktur auf deinem Server schließen kann.

Ich sehe, dass es funktioniert, aber ich wüsste gern, was da genau abläuft.

Na, alle Klarheiten beseitigt? :)

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[