Zur Navigation

Direct Url für xtcommerce umschreiben reviews.php

1 frank1111

Hallo, wir sind gerade dabei die URLs für Bewertungen, also die Datei reviews.php für Xtcommerce umzuschreiben in Produktbewertungen.html. Das funktioniert so weit auch einwandfrei mit folgendem Code:
RewriteRule ^Produktbewertungen\.html$ reviews.php [L]

Die Seite ist jetzt unter http://www.tischtennisplatte-24.com/Produktbewertungen.html erreichbar. Allerdings versuche ich vergeblich die http://www.tischtennisplatte-24.com/reviews.php weiterzuleiten, auf die Produktbewertungen.html, ich habe es damit versucht:

RewriteRule ^reviews\.php$ http://localhost/xtcdevelopment/Produktbewertungen.html [R=301,L]

Das funktioniert auch, die korrekte Ausführung kollidiert aber mit folgendem:

# Onlie use Rewrite Engine, if Directory or File not exist
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

Es handelt sich um die Standard-Direct-Url htaccess-Datei von Bluegate für Xtcommerce.

Danke schon mal vorab für die Antworten.

Beste Grüße Frank

23.06.2012 10:09

2 Jörg Kruse

Auf die Reihenfolge komm es an: zuerst die (mit einem "L(ast)" Flag versehenen) Weiterleitungen, dann die anderen Rewrites.

23.06.2012 10:26

1 Forenmitglied fand diesen Beitrag gut

3 frank1111

Hallo Jörg,

da muss man auch erst mal drauf kommen. Es funktioniert jetzt, danke dir!

Gruß Frank

23.06.2012 10:40

4 frank1111

Hallo Jörg,

leider habe ich mich getäuscht. Die Weiterleitung funktioniert immer noch nicht. Es klappt nur, wenn ich Sie so setze, dann kommt aber eine Fehlerseite von Apache:

RewriteRule reviews\.php http://localhost/xtcdevelopment/Produktbewertungen.html [R=301]
# Onlie use Rewrite Engine, if Directory or File not exist
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

RewriteRule ^Produktbewertungen\.html$ reviews.php [L]

Wie hast du das gemeint mit dem Last-Flag? So funktioniert es jedenfalls nicht:


RewriteRule reviews\.php http://www.tischtennisplatte-24.com/Produktbewertungen.html [R=301,L]
RewriteRule ^Produktbewertungen\.html$ reviews.php [L]

Hast du eine Idee, woran es liegen könnte? Muss ich am Server einen Cache löschen? Danke dir!

Gruß Frank

23.06.2012 11:14

5 Jörg Kruse

Ich würde diese Reihenfolge wählen:

RewriteRule reviews\.php http://localhost/xtcdevelopment/Produktbewertungen.html [R=301]

RewriteRule ^Produktbewertungen\.html$ reviews.php [L]

 # Onlie use Rewrite Engine, if Directory or File not exist
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILENAME} -d
 RewriteRule ^(.+) - [PT,L]

Die letzte Rule greift sich mit dem Muster "^(.+)" alle, was nicht durch eine vorherige Rule mit einem "L" Flag erfasst wurde - sie sollte deswegen ganz an das Ende platziert werden.

Wie hast du das gemeint mit dem Last-Flag?

Das Last-Flag ist das große L in eckigen Klammern

Muss ich am Server einen Cache löschen?

Wenn, dann den Cache in deinem Browser

23.06.2012 15:19

6 frank1111

Guten Morgen Jörg, das Problem ist, dass die reviews.php ohne den folgenden Code, nicht ausgeführt wird:

# Onlie use Rewrite Engine, if Directory or File not exist
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT]

Dann kommt ein 404-Fehler. Man benötigt also die oben genannte Rule. Wenn ich das folgende jetzt davor setze, wird zwar umgeleitet, aber mit dem Umleitungsfehler: Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

RewriteRule reviews\.php http://localhost/xtcdevelopment/Produktbewertungen.html [R=301]

RewriteRule ^Produktbewertungen\.html$ reviews.php [L]

Gruß Frank


24.06.2012 06:40

7 Jörg Kruse

Wenn ich das folgende jetzt davor setze, wird zwar umgeleitet, aber mit dem Umleitungsfehler: Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

Ja, du leitest von A nach B weiter und schreibst anschließend von B nach A um. Das ergibt eine Endlosweiterleitung. Das Weiterleiten der URL benötigt also noch als Bedingung, dass A die vom Browser aufgerufene URL ist (und nicht nur ein umgeschriebenes B). Hierzu kann man auf den Parameter THE_REQUEST prüfen

RewriteCond %{THE_REQUEST} /reviews\.php 
RewriteRule reviews\.php http://localhost/xtcdevelopment/Produktbewertungen.html [R=301]

RewriteRule ^Produktbewertungen\.html$ reviews.php [L]


24.06.2012 08:08 | geändert: 24.06.2012 08:10

8 frank1111

Hallo Jörg, wie du es geschildert hast, funktioniert es einwandfrei. Ich hab nur noch das Problem mit den Files, die einen Querystring haben, das scheint aber für dich kein Problem zu sein.

# PRODUCT_REVIEWS_WRITE.PHP
RewriteCond %{THE_REQUEST} /product_reviews_write\.php
RewriteRule product_reviews_write\.php?products_id=(.+) Produktbewertung-schreiben-$1.html [R=301]
RewriteRule ^Produktbewertung-schreiben-(.*)\.html$ product_reviews_write.php?products_id=$1 [L]

Ich würde dir gerne ein kleines Dankschön zukommen lassen, kannst du mir deine Paypaladresse senden?

Danke nochmal! Gruß Frank

24.06.2012 11:41

9 Jörg Kruse

Der Query String muss in einer eigenen RewriteCond behandelt werden

RewriteCond %{THE_REQUEST} /product_reviews_write\.php
RewriteCond %{QUERY_STRING} products_id=(.+)
RewriteRule product_reviews_write\.php? Produktbewertung-schreiben-%1.html? [R=301]

Variablen aus einer RewriteCond werden dann mit %1, %2 etc. aufgnommen statt mit $1, $2 etc.

Das ? an der Ziel-URL hängt den alten Query String ab

Ich würde dir gerne ein kleines Dankschön zukommen lassen, kannst du mir deine Paypaladresse senden?

Du kannst, wenn du möchtest, für die Entwicklung meiner Forensoftware spenden:

http://jkbb.de/spende

24.06.2012 12:13

10 frank1111

Hallo Jörg,

das funktioniert auch, jetzt hab ich nur noch das Problem, dass der Admin-Bereich auch weiter geleitet wird. Also aus domain.de/admin/reviews.php wird dann auch an Produktbewertungen.html weiter geleitet und ich kann keine Produktbewertungen mehr freischalten.

Du hast mir den Tag gerettet. Danke dir nochmal.

Gruß Frank

24.06.2012 12:23