htaccess modrewrite -> Umleitungslimit überschritten!
Martin Stern
- webserver
0 Moses
Hi,
ich habe ein kleines Problem, und zwar habe ich mein Forum per Modrewrite umgeschrieben was soweit auch sehr gut funktioniert:
hier ist der Code der htaccess:
RewriteEngine On
RewriteRule ^t([0-9]+)-?([0-9]+)?.htm$ showtopic.php?thread=$1&pagenum=$2 [QSA,L]
RewriteCond %{QUERY_STRING} ^thread=([0-9]+)&pagenum=([0-9]+)$
RewriteRule ^showtopic.php$ /t%1-%2.htm? [R=301,L]
RewriteCond %{QUERY_STRING} ^thread=([0-9]+)$
RewriteRule ^showtopic.php$ /t%1.htm? [R=301,L]
wenn jemand folgendes aufruft wird daraus:
www.domain.de/showtopic.php?threadid=389343 -> www.domain.de/t389343.htm
wenn allerdings jemand mehrseitige Themen aufruft (mit pagenum)
www.domain.de/showtopic.php?threadid=389343&pagenum=2
wird das ganze nicht umgeschrieben, sondern man bekommt die Meldung Umleitungslimit für diese URL überschritten. Die angeforderte Seite konnte nicht geladen werden.
da es beinahe alles funktioniert und ich irgendwie den Haaken nicht finde frage ich hier und hoffe das ein Experte den Fehler sieht!
freue mich über jeden Tipp!
Gruss
Martin
P.S. die Max Redirects hochsetzen funktioniert auch nicht bzw. führt zu Err 500
Hallo!
Catch New + Rewrite
RewriteRule ^t([0-9]+)-?([0-9]+)?.htm$ showtopic.php?thread=$1&pagenum=$2 [QSA,L]
Catch old Urls
RewriteCond %{QUERY_STRING} ^thread=([0-9]+)&pagenum=([0-9]+)$
RewriteRule ^showtopic.php$ /t%1-%2.htm? [R=301,L]
RewriteCond %{QUERY_STRING} ^thread=([0-9]+)$
RewriteRule ^showtopic.php$ /t%1.htm? [R=301,L]
wenn allerdings jemand mehrseitige Themen aufruft (mit pagenum)
www.domain.de/showtopic.php?threadid=389343&pagenum=2
wird das ganze nicht umgeschrieben, sondern man bekommt die Meldung Umleitungslimit für diese URL überschritten.
Schritt für Schritt:
showtopic.php?threadid=1&pagenum=2 wird im ersten Schritt durch Regel 2 zu t1-2.htm umgeschrieben wird. Dann erfolgt wie gewünscht (Umleitung 301) ein erneuter Aufruf durch den Browser mit t1-2.htm, was wegen Regel 1 zu showtopic.php?threadid=1&pagenum=2 umgeschrieben wird. Bis hierhin alles wie erwartet.
Dein Problem ist jetzt, dass der letzte Schritt (Regel 1) eine interne Umleitung zur Folge hat, das bedeutet, für showtopic.php?threadid=1&pagenum=2 wird quasi eine neue HTTP-Anfrage erzeugt, allerdings intern im Apache. Damit geht alles wieder von vorne los und showtopic.php?threadid=1&pagenum=2 wird wegen Regel 2 zu t1-2.htm umgeschrieben, was die Endlosschleife startet: Externe Umleitung, t1-2 zu showtopic, showtopic zu t1-2, externe Umleitung und so weiter.
Bevor du fragst:
Zur Abhilfe könntest du ganz einfach die Parameter von showtopic in Regel 1 vertauschen:
RewriteRule ^t([0-9]+)-?([0-9]+)?.htm$ showtopic.php?pagenum=$2&thread=$1 [QSA,L]
Diese URL passt nicht mehr auf Regel 2 und dem Skript ist es egal, in welcher Reihenfolge die Parameter kommen.
P.S. die Max Redirects hochsetzen funktioniert auch nicht bzw. führt zu Err 500
Natürlich nicht, ob du nun 200 oder 300 Mal deinen Kopf mit aller Gewalt gegen eine Betonwand donnerst, ist für den Schädelbruch nicht wirklich wichtig.
Gruß, Moses
Grundlage für Zitat #159.