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]