Mod Rewrite: angezeigte URL in Adressleiste ändern
MrSnoot
- webserver
Hio,
ich habe meine Homepage via Rewrite jetzt komplett umgestellt, so dass ich die dynamischen URLs los bin. Leider sind bei Google natürlich noch die ganzen alten URLs hinterlegt.
Jetzt wollte ich via RewriteRules, dass die alte URL in der Adressleiste in die neue geändert wird, aber es klappt nicht so ganz.
Aus '/hl.php?bereich=grundlagen' soll z.B. '/grundlagen/' werden.
Der Code sieht im Moment so aus:
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/hl\.php\?bereich=([a-z]+)
RewriteRule ^hl\.php$ /de/%1/ [R=301]
RewriteRule ^/([a-z]+)/ hl.php?bereich=$1
Damit wird aus 'hl.php?bereich=grundlagen' aber '/grundlagen/?bereich=grundlagen'
What's da denn wrong?
Hi,
What's da denn wrong?
da is a [L] missing, um zu sayen dass the Regel the last ist. Would I mal einfach so think.
Cheatah
Und wenn es nicht die letzte Regel ist?
Hi,
Und wenn es nicht die letzte Regel ist?
dann würde es ja schon funktionieren.
Cheatah
Und was, wenn es mit [L] auch nicht klappt?
Dann stimmt möglicherweise Deine Regel nicht (d.h. sie wird vermutlich nicht gematcht).
Gruß, LX
Hi,
Dann stimmt möglicherweise Deine Regel nicht (d.h. sie wird vermutlich nicht gematcht).
entweder das, oder die automatische Übernahme des Query Strings funktioniert wie vorgesehen und dokumentiert. Aber das wäre doch zu einfach, oder?
Cheatah
(d.h. sie wird vermutlich nicht gematcht)
d.h.?
So halbwegs funktioniert der Code ja.
echo $begrüßung;
Und wenn es nicht die letzte Regel ist?
Zum R-Flag sagt das Apache-Handbuch: »Remember that this flag on its own will only prepend http://thishost[:thisport]/ to the URL, and rewriting will continue. Usually, you will want to stop rewriting at this point, and redirect immediately. To stop rewriting, you should add the 'L' flag.«
Wenn du kein L notierst trifft die zweite Regel zu und macht dir deine Änderung wieder rückgängig.
echo "$verabschiedung $name";
Falls es noch jemanden interessiert:
Der Code sieht im Moment so aus:
RewriteCond %{THE_REQUEST} [1]+\s/hl.php?bereich=([a-z]+)
RewriteRule ^hl.php$ /de/%1/ [R=301]
RewriteRule ^/([a-z]+)/ hl.php?bereich=$1
und so muss er sein, damit es klappt:
~~~php
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/hl\.php\?bereich=([a-z]+)
RewriteRule ^hl\.php$ /de/%1/? [R=301]
RewriteRule ^/([a-z]+)/ hl.php?bereich=$1
Es hat also nur das ? am Ende von Zeile zwei gefehlt.
A-Z ↩︎