Seite 1 von 1
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 12:43
von Airport1
Angenommen ich habe eine
RewriteRule vote\/([^\/]*)\/?.*$ /vote.php?link_id=$1
damit /vote/1/ nach /vote.php?link_id=1
aufloest. Nun sind aber schon alle moeglichen
/vote.php?link_id=<NUMMER>
bei Google indiziert. Wie schaff ich es dann am saubersten (!) in der htaccess zu sagen:
Loese zwar /vote/<NUMMER>/ zu /vote.php?link_id=<NUMMER> auf,
aber liefere bei direktem Aufruf (kein "SubRequest") von /vote.php?link_id=<NUMMER> eine 410 GONE, oder eine 403 FORBIDDEN Seite.
Es soll also verhindert werden dass die Rules sich gegenseitig ins JENSEITS schiessen oder eine INFINITE LOOP entsteht..
Es soll also /vote/1/ z.B. indiziert werden, vote.php?id=1 aber nicht, bzw. die schon indizierten auf Dauer rausfliegen..
PS: der robots.txt bzw. Google trau ich sonst nicht zu, es zu blicken

Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 13:03
von mariow
Nicht schlecht, da musste ich doch gleich mal basteln und gucken.
Ganz einfach ist das nicht, da die zweite Anfrage mit der umgeschriebenen URL intern nicht als Subrequest behandelt wird und man auch per Environment-Var nichts transportieren kann (oder ichhabs nicht hinbekommen).
Da es dir nur darum geht alte URLs ungültig zu machen, sollte es der folgende Ansatz tun:
Code: Alles auswählen
RewriteRule vote\/([^\/]*)\/?.*$ /vote.php?link_id=$1&subreq=1 [L]
RewriteCond %{REQUEST_URI} vote\.php
RewriteCond %{QUERY_STRING} !subreq=1
RewriteRule .* - [G]
An den sauber umgeschriebenen Aufruf wird einfach ein zusätzlicher URL-Parameter angehangen der dafür sorgt, dass die Anfrage von der "Fehler-Regel" ignoriert wird. Gewinnt keinen Schönheitspreis, aber scheint mir der einzige gangbare Weg zu sein.
BTW: Ich würde die erste Rule noch so abändern damits sauberer wird:
Code: Alles auswählen
RewriteRule vote\/([0-9]+)\/?.*$ /vote.php?link_id=$1&subreq=1 [L]
Re: RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 13:24
von Bauchladen
Airport1 hat geschrieben:
Es soll also verhindert werden dass die Rules sich gegenseitig ins JENSEITS schiessen oder eine INFINITE LOOP entsteht..
meinst du den ?
https://www.abakus-internet-marketing.d ... tml#159145
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 13:27
von Airport1
Der Trick mit Para anhaengen ist gut, bzw. sehr gut. Aber muss man definitiv so tricksen?
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 13:29
von Bauchladen
Ich meine es gibt da noch eine Moeglichkeit was mit Subrequests zu machen, aber ich meine auch dass das nichts damit zu tun hatte. Am besten selber noch mal RTFM

RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 13:58
von Airport1
Das hab ich auch gefunden mit den SubRequests ... namentlich [NS] ... nur hat das bei mir nicht die Bohne funktioniert, bzw. wurde nicht zw. Requests und SubRequests unterschieden..
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 14:11
von mariow
Das meinte ich ja oben bereits. Ein Subrequest ist eine Anfrage die von einem anderen Modul gestellt wird. Wenn also z.B. mod_include anfragt ob es /test.txt gibt, dann ist das ein Subrequest.
Wird eine URL von mod_rewrite umgeschrieben, dann wird das Resultat nocheinmal ohne besondere Kennzeichnung an mod_rewrite übergeben - oder ich hab die Kennzeichnung noch nicht gefunden

RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 16:54
von Babelfisch
Ohne zusätzlichen Parameter in der URL kannst du es so machen:
Code: Alles auswählen
RewriteRule vote/([0-9]+)/? /vote.php?link_id=$1 [E=VOTE:OK,L]
RewriteCond %{ENV:REDIRECT_VOTE} !OK
RewriteRule vote\.php - [G]
Beim Umschreiben der URL setzt du die Umgebungsvariable 'VOTE' mit dem Wert 'OK'. Wird vote.php direkt aufgerufen, fehlt diese Variable und du sendest ein '410 Gone'.
Frag mich jetzt bitte nicht, warum die Umgebungsvariable 'VOTE' zu 'REDIRECT_VOTE' mutiert? Ich hab selber eine Weile gebraucht dahinter zu kommen - weiß aber nicht, warum das so ist. Hier funktioniert das aber im Apache 2 unter Linux und Windows wunderbar.
RewriteRule soll nur in je eine Richtung greifen
Verfasst: 15.01.2006, 16:58
von mariow
Ok, so gehts - nicht schlecht. Ich hab den Weg mit der Env-Var wieder aufgegeben weil ich dachte, die ist im zweiten Aufruf nicht mehr verfügbar. Das sich der Name ändert steht wohl nur im Kleingedruckten
