Seite 1 von 1

Endlosschleife bei httaccess redirect in Kombination rewrite

Verfasst: 11.02.2010, 12:23
von FloM
Hallo,

ich habe in meiner .htaccess folgende Regeln angelegt:

Code: Alles auswählen

RedirectPermanent /name-p-1152.html http://www.name.eu/name-p-4041.html

RewriteRule ^(.*)-p-([0-9]*).html$ product_info.php?products_id=$2&%{QUERY_STRING} [L]
Dabei wird eine Endlosschleife erzeugt. Hat jemand eine Idee warum und wie ich das lösen kann?

Gruß
Flo

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Re: Endlosschleife bei httaccess redirect in Kombination rew

Verfasst: 11.02.2010, 15:00
von Mork vom Ork
FloM hat geschrieben:

Code: Alles auswählen

RedirectPermanent /name-p-1152.html http://www.name.eu/name-p-4041.html

RewriteRule ^(.*)-p-([0-9]*).html$ product_info.php?products_id=$2&%{QUERY_STRING} [L]
Dabei wird eine Endlosschleife erzeugt. Hat jemand eine Idee warum und wie ich das lösen kann?
Wo da eine Endlosschleife herkommt, kann ich auf die Schnelle nicht erkennen, das liegt eventuell daran, dass mod_rewrite bei der Verarbeitung eines Pfades mehrfach eingreift.
mod_alias (Redirect) ist etwas einfacher gestrickt als mod_rewrite (RewriteRule), was zwar grundsätzlich gut ist, aber wenn die beiden auf den gleichen Pfaden rumackern, kommen sie sich gerne mal in die Quere. Insofern solltest du in diesem Falle die Redirect-Zeile durch eine mit RewriteRule ersetzen:

RewriteRule ^name-p-1152\.html$ https://www.name.eu/name-p-4041.html [R=301,L]

Und nur nebenbei, der Schönheit wegen:

RewriteRule ^(.*)-p-([0-9]*).html$ product_info.php?products_id=$2&%{QUERY_STRING} [L][/code]

Klammern brauchst du nur dann setzen, wenn du a) einen Bereich zur Verwendung mit $ abgreifen willst oder b) Bereiche gruppieren musst. Keines von dem beiden ist bei deinem ersten Klammerpaar der Fall. Man sieht es zwar immer wieder, aber das Muster .* muss nicht in Klammern gesetzt werden, es funktioniert auch ohne.
(Beachte, dass du bei einer Änderung im Ziel $2 gegen $1 austauschen musst, da die gewünschte Klammer dann die erste wäre, nicht mehr die zweite.)

Der Punkt ist in solchen Mustern ein Platzhalter. Möchtest du, dass im zu vergleichenden Text ein Punkt als solcher erscheint (zB .html), maskiere den Punkt im Muster mit einem Rückstrich (zB \.html).

Da du den Multiplikator * benutzt ( = beliebig viele, einschließlich gar keinem) passt dein Muster momentan auch auch auf den Pfad -p-.html – möchtest du das nicht, benutze statt * lieber + ( = mindestens eines).

Folglich:

RewriteRule ^.+-p-([0-9]+)\.html$ product_info.php?products_id=$1&%{QUERY_STRING} [L][/code]

Verfasst: 17.02.2010, 15:38
von FloM
Danke für die vielen Tips. Habe ich alle umgesetzt und mein Problem ist auch gelöst! :D