Seite 1 von 1

URL mit Fragezeichen umleiten

Verfasst: 04.11.2011, 07:54
von nails
Hallo zusammen

Ich moechte gerne

/a/showproduct.php?product=xxx

nach

/a/showphoto.php?photo=xxx

umleiten und bekomme es einfach nicht hin.

Ein /b/showproduct.php?product=xxx gibt es und soll auch so bleiben.

Fuer Hilfe bzw. Ansatzpunkte zur Loesungsumsetzung waere ich dankbar.

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Verfasst: 04.11.2011, 08:39
von Malte Landwehr
Du hast vermutlich versucht, das Fragezeichen auf klassischem Wege im RegExp zu matchen? Das Zauberwort heißt QUERY_STRING. Schau dir z.B. https://stackoverflow.com/questions/579 ... h-htaccess an oder google einfach mal nach "modrewrite questionmark", "redirect questionmark", usw.

Verfasst: 04.11.2011, 10:08
von Melegrian
Probiere mal, so sollte es gehen, unter Localhost funktioniert es zumindest:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^product=(.*)$ [NC]
RewriteRule ^a/showproduct.php$ /a/showphoto.php?photo=%1 [L,R=301]
Wenn als Wert jedoch nur Zahlen oder Buchstaben übergeben werden, so ist ein weniger gieriger Ausdruck für (.*) empfehlenswert, wie zum Beispiel ([A-Za-z]+) oder für Zahlenwerte:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^product=([0-9]+)$ [NC]
RewriteRule ^a/showproduct.php$ /a/showphoto.php?photo=%1 [L,R=301]

Verfasst:
von

Verfasst: 04.11.2011, 13:49
von nails
Vielen das fuer das Feedback.

Ich habe jetzt beide Vorschlaege versucht und es funktioniert nicht.

Ich bekomme die Meldung 'Not found' ... /showproduct.php was not found on this server.

Weitere Vorschlaege?

Verfasst: 04.11.2011, 14:26
von tmyp
Wo hast Du die .htaccess abgelegt?

Und sonst noch ein Vorschlag: selbst lesen macht schlau. Nur darauf warten, dass jemand dir die Lösung präsentiert hilft nicht.

Verfasst: 04.11.2011, 14:36
von Melegrian
Also, bei mir funktioniert es:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^literatur=([0-9]+)$ [NC]
RewriteRule ^demoshop/demo.php$ /demoshop/demo.php?software=%1 [L,R=301]
Wenn ich

Code: Alles auswählen

http://localhost/demoshop/demo.php?literatur=2
aufrufe, dann wird

Code: Alles auswählen

http://localhost/demoshop/demo.php?software=2
geladen.

Wie so 'Not found' ... /showproduct.php, existiert die Datei nicht? Oder den Pfad fehlerhaft eingetippt?

Verfasst: 04.11.2011, 15:01
von nails
Vielen lieben Dank an alle. Vor allem Melegrian fuer die tolle Unterstuetzung.

Folgendes hat bei mir das Problem geloest.

RewriteCond %{QUERY_STRING} ^product=(.*)$ [NC]
RewriteRule ^showproduct.php$ showphoto.php?photo=%1 [L,R=301]

Verfasst: 04.11.2011, 15:28
von Melegrian
Gut, alles klar. Hatte gerade noch einen zweiten Test gemacht und nicht nur den Namen des Parameters verändert, sondern den Aufruf auch auf eine andere Datei geleitet, das funktionierte ebenfalls.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^literatur=([0-9]+)$ [NC]
RewriteRule ^demoshop/demo.php$ /demoshop/start.php?software=%1 [L,R=301]

Verfasst: 16.07.2013, 13:30
von rufiO
Hallo!

Ich habe ein ähnliches Problem, komme jedoch nicht auf die korrekte Lösung. Bei mir besteht die alte Adresse und die neue Adresse aus URLs mit einem "?" im Namen. Es handelt sich hierbei um die häufigsten Suchbegriffe meiner Seite, die unter dem alten CMS (Joomla) gut gerankt haben und die ich jetzt mit dem neuen CMS (Wordpress) nicht verlieren will. Daher will ich nun auf die neuen Suchergebnisse weiterleiten. Insgesamt sind es nur 9 Begriffe. Ich habe es natürlich auch erst falsch gemacht und das "?" nicht weiter beachtet (nur damit ihr seht, was auf was weiterleitet werden soll):

Code: Alles auswählen

redirect 301 /suche.html?keyword=Keywordeins /?s=Keywordeins&post_type=product
redirect 301 /suche.html?keyword=Keywordzwei /?s=Keywordzwei&post_type=product
redirect 301 /suche.html?keyword=Keyworddrei /?s=Keyworddrei&post_type=product
Nach Eurer Anleitung habe ich dann für den ersten Suchbegriff dies hier erstellt:

Code: Alles auswählen

RewriteCond %{query_STRING} ^keyword=Keywordeins([A-Za-z]+)$
RewriteRule ^suche\.html$ /?s=Keywordeins&post_type=product [L,R=301]
Leider klappt es nicht. Ich vermute, dass es daran liegt, dass die neue URL ebenfalls ein "?" enthält - kann das sein? Obwohl im oberen Beispiel ja auch ein "?" drin ist. Hmm, was mache ich falsch. Kann mir bitte jemand helfen?

Danke im Voraus!

Verfasst: 16.07.2013, 13:49
von chris21
Lies einfach nochmal den Beitrag von Malte ;)

Verfasst: 16.07.2013, 14:46
von rufiO
Da habe ich schon draufgeschaut. Hier kommen für mich mehr Fragen auf als Antworten. Ich kann da für mich nicht das Essentielle draus ziehen. Da geht es ja um schöne Links und Ordnerstrukturen. Das macht Wordpress ja zum Glück.

Meins muss auch nicht variabel sein. Ich benötige das nur für 9 Seiten, deren URLs mir bekannt sind und auch so bleiben sollen.
Von:
/suche.html?keyword=Keywordeins
Nach:
/?s=Keywordeins&post_type=product

Es kann sich doch nur noch um eine kleine Änderung handeln, oder?

Verfasst: 16.07.2013, 14:59
von chris21
Bitte nochmal lesen.

Das Grundproblem ist, dass Du URLs mit Fragezeichen nur über mod_rewrite mit der RewriteCond auf den QUERY_STRING abfangen kannst. Anders kommst Du bei ? in der URL (d.h. GET Parametern) nicht weiter.

Wenn Dir das klar ist, kannst Du die Lösung finden.

Verfasst: 16.07.2013, 15:08
von rufiO
Ja, das ist mir klar. Vielleicht hast Du es übersehen, aber das habe ich bereits ohne Erfolg ausprobiert:

Code: Alles auswählen

RewriteCond %{query_STRING} ^keyword=Keywordeins([A-Za-z]+)$
RewriteRule ^suche\.html$ /?s=Keywordeins&post_type=product [L,R=301]
... und zwar in so unzähligen unterschiedlichen Kombinationen, dass ich nicht mehr weiß wo vorne und hinten ist. Seit fast 5 Stunden sitze da ich nun dran. Der letzte Schritt ist für mich dann immer eine Frage in nem Forum. Womit ich mir etwas Klarheit erhofft habe.

Verfasst: 16.07.2013, 15:54
von chris21
Den Versuch hatte ich wahrlich übersehen.

Also nun:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^keyword=([A-Za-z\ -]+)$
RewriteRule ^suche\.html$ /?s=%1&post_type=product [L,R=301]
Wichtig ist zudem eventuell noch die Position dieser Anweisung.

Packe Sie mal testweise schön weit vorne in die htaccess, vor anderen Rewrite Rules.

Verfasst: 16.07.2013, 16:21
von rufiO
Yeah - funktioniert!

Der Tipp mit der Position war noch wichtig. Ich hab das jetzt an die erste Stelle gepackt, noch vor dieser Anweisung:

Code: Alles auswählen

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - &#91;L&#93;
RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93;
</IfModule>
Direkt dahinter hat es nicht funktioniert.

Vielen Dank! :D