HTACCESS Weiterleitungsproblem
HP-Bauer
- webserver
Hallo,
ich habe das Problem, dass es bei einer Website für die identische Startseite 3 Adressen gibt: www.domain.de/index.php, www.domain.de/index.php?article_id=1 und www.domain.de Für Facebook, Google o.ä. ist das unpraktisch. Jetzt möchte ich per HTACCESS www.domain.de/index.php und www.domain.de/index.php?article_id=1 auf www.domain.de weiterleiten.
Warum funktioniert folgende Weiterleitung für www.domain.de/index.php?article_id=1 auf www.domain.de nicht?
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index.php?article_id=1
RewriteRule ^index.php$ http://www.domain.de/? [R=301,L]
Was ist da falsch? Fehlermeldungen sind übrigens Fehlanzeige, beim Aufruf von www.domain.de/index.php?article_id=1 passiert einfach nur keine Weiterleitung.
MfG,
HP-Bauer
Zum Gruße, Genosse!
Warum funktioniert folgende Weiterleitung für www.domain.de/index.php?article_id=1 auf www.domain.de nicht?
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index.php?article_id=1
Die URL-Parameter, d.h. der Teil hinterm Fragezeichen, tauchen nicht in REQUEST_URI auf, sondern stehen in QUERY_STRING. Das wird auch ausdrücklich in der Anleitung für RewriteCond bzw. REQUEST_URI erwähnt:
"REQUEST_URI: The path component of the requested URI, such as "/index.html". This notably excludes the query string which is available as as its own variable named QUERY_STRING."
Probiere es so:
RewriteCond %{THE_REQUEST} "[1]+ /index.php(?article_id=1)? HTTP/1."
RewriteRule ^index.php$ http://www.domain.de/? [R=301,L]
Auf diesem Weg schlägst du zwei Fliegen mit einer Klappe. Du vergleichst zum einen, ob URL-Parameter angegeben sind, und falls ja, ob's article_id=1 ist.
Zum zweiten stellst du sicher, dass nur direkte Anfragen für index.php betroffen sind. Das machst du zwar scheinbar auch in der RewriteRule-Zeile, allerdings kann sich der Wert, den RewriteRule zum Vergleich heranzieht, im Verlauf der .htaccess-Abarbeitung ändern. Durch direkten Vergleich der Browser-Anfrage gehst du sicher, dass auch wirklich nur das geprüft wird, was du prüfen möchtest, nämlich die "falschen" Anfragen von außen - und nicht das, was dein Server daraus macht.
A-Z ↩︎
Hallo,
vielen Dank für die Antwort. Leider funktioniert die genannte Regel bei mir aber so nicht. Es passiert nämlich nichts und lasse ich die Anführungszeichen weg, erhalte ich einen Internal Server Error 500.
Probiere es so:
RewriteCond %{THE_REQUEST} "[1]+ /index.php(?article_id=1)? HTTP/1."
RewriteRule ^index.php$ http://www.domain.de/? [R=301,L]
Wenn ich es mit der Variable QUERY_STRING versuche, passiert ebenfalls nichts:
RewriteCond %{QUERY_STRING} article_id=1
RewriteRule ^index.php$ http://www.domain.de/? [R=301,L]
Ich habe auch schon folgende Schreibweisen probiert:
RewriteCond %{QUERY_STRING} ^article_id=1$
RewriteCond %{QUERY_STRING} "^article_id=1$"
RewriteCond %{QUERY_STRING} ^article_id=1?
Leider alles ohne Erfolg. Hat noch jemand eine Idee?
MfG
HP-Bauer
A-Z ↩︎
Leider funktioniert die genannte Regel bei mir aber so nicht. Es passiert nämlich nichts
Gerade ausprobiert, hier tut sie wie sie soll.
und lasse ich die Anführungszeichen weg, erhalte ich einen Internal Server Error 500.
Das bedeutet immerhin schonmal, dass die Anweisung zumindest eingelesen wird. Gehe schrittweise vor:
Versuche nur, d.h. _ohne_ RewriteCond und _ohne_ sonstige mod_rewrite-Anweisungen, die Zeile
RewriteRule . http://sonst.wo/ [R=302]
ob mod_rewrite überhaupt greift.
Wichtig: Bei allen Versuchen 302 verwenden; mit 301 wirst du möglicherweise durch alte Ergebnisse aus dem Browser-Cache in die Irre geführt. Falls du ganz paranoid bist, kannst du zusätzlich als Ziel für jeden Versuch eine neue URL angeben, http://sonst.wo/a, dann http://sonst.wo/b usw. Ob da eine Seite hinterlegt ist, ist ja wurscht, wichtig ist, was in der Adresszeile des Browsers erscheint.
Funktioniert das, erweitere das Muster auf ^index.php$. Funktioniert auch dieses, arbeite dich entsprechend mit RewriteCond und THE_REQUEST weiter vor.
Sobald es nicht mehr funktioniert, hast du den Fehler eingekreist, dann kann man weiterschauen.
Hi,
ich habe das Problem, dass es bei einer Website für die identische Startseite 3 Adressen gibt: www.domain.de/index.php, www.domain.de/index.php?article_id=1 und www.domain.de Für Facebook, Google o.ä. ist das unpraktisch.
Canonical URL per Meta-Element angeben, fertig.
MfG ChrisB