Zur Navigation

Frage zur Weiterleitung in der htaccess [2]

11 Jörg Kruse

Der Teil "/de/seiten/" soll wegfallen und statt dessen das Verzeichnis buch/Suchbegriff gefolgt von "&seite=irgendEineZahl"

Möchtest du ernsthaft einen (virtuellen) Dateinamen "Suchbegriff&seite=irgendEineZahl" konstruieren? oder geht es dir darum, den Parameter seite=irgendEineZahl an die statische URL anzuhängen:

Suchbegriff?seite=irgendEineZahl

Der Query String wird wie gesagt durch ein ? eingeleitet - ein & mitten im Dateinamen halte ich für ziemlichen Blödsinn

Ich möchte aber
https://www.domain.de/buch/suchbegriff?seite=seitenzahl

OK, du möchtest also den Parameter seite=seitenzahl noch hinten dranhängen. Dazu bräuchte es eigentlich gar kein Änderung, da das QSA-Flag schon dafür sorgen sollte, dass etwaige Parameter automatisch wieder hinten an die interne URL angehängt werden:

RewriteRule ^/?buch/(.+)$ de/seite/searchb.php?var=$1 [L,QSA]

Hast du die URL https://www.example.com/buch/suchbegriff?seite=2 denn mal testweise aufgerufen und geschaut, was angezeigt wird?

24.09.2020 13:00 | geändert: 24.09.2020 13:01

12 WhiteWay

Hast Recht. Das lässt sich so aufrufen. Problem ist nur die 1. Seite. Die lässt sich einmal mit und einmal ohne den Seitenzahl-Parameter aufrufen.

Und das 2. Problem ist, daß ich von der searchb.php aus, den Canonical-Link nicht richtig ausgegeben bekomme. Der ist immer
https://www.domain.de/buch/suchbegriff
ganz gleich, auf welcher Seite ich mich befinde.

24.09.2020 15:44

13 Jörg Kruse

Problem ist nur die 1. Seite. Die lässt sich einmal mit und einmal ohne den Seitenzahl-Parameter aufrufen.

In dem Fall kannst du weiterleiten:

RewriteCond %{QUERY_STRING} seite=1
RewriteRule ^/?buch/(.+)$ https://www.example.com/buch/$1/? [L,R=301]

Das ? hängt einen leeren Query String an die Weiterleitungs-URL, welcher ohne das Flag QSA den Parameter seite=1 überschreibt

Und das 2. Problem ist, daß ich von der searchb.php aus, den Canonical-Link nicht richtig ausgegeben bekomme. Der ist immer
https://www.domain.de/buch/suchbegriff
ganz gleich, auf welcher Seite ich mich befinde.

Das ist wohl eher ein Problem, welches in der searchb.php gelöst werden muss.

24.09.2020 22:35

14 WhiteWay

Das Problem liegt nicht in der php-Datei, sondern in dem CMS, das ich benutze. Es filtert das & und alles dahinter raus.

Jetzt muss ich es doch so machen:
https://www.example.com/buch/suchbegriff/seitenzahl

Dann klappt es auch mit dem canonical, weil dann nichts herausgefiltert wird.

ABER: jetzt erzeugt die vorherige URL https://www.domain.de/buch/suchbegriff?seite=seitenzahl einen 404. Also muss ich sie umleiten auf
https://www.domain.de/suchbegriff/seitenzahl.

Und die searchb.php?buch=x&seite=y sollte auch nicht in der Browserzeile stehen bleiben, sondern umleiten auf https://www.domain.de/suchbegriff/seitenzahl.

Wie mache ich das?

29.09.2020 14:47

15 Jörg Kruse

Das Problem liegt nicht in der php-Datei, sondern in dem CMS, das ich benutze. Es filtert das & und alles dahinter raus.

"&" oder "?"? hier ist kein "&" enthalten:

Ich möchte aber
https://www.domain.de/buch/suchbegriff?seite=seitenzahl

Wenn du diese beiden Sonderzeichen (wie schon öfters in diesem Thread) ducheinanderbringst, könnte das natürlich auch eine Ursache des Problems sein

ABER: jetzt erzeugt die vorherige URL https://www.domain.de/buch/suchbegriff?seite=seitenzahl einen 404. Also muss ich sie umleiten auf
https://www.domain.de/suchbegriff/seitenzahl.

Und die searchb.php?buch=x&seite=y sollte auch nicht in der Browserzeile stehen bleiben, sondern umleiten auf https://www.domain.de/suchbegriff/seitenzahl.

Wie mache ich das?

Das sind zwei Redirects, in denen du jeweils den Query String in einer RewriteCond abfragst, so in etwa:

RewriteCond %{QUERY_STRING} seite=([0-9]+)
RewriteRule ^buch/([^/]+)$ https://www.example.com/buch/$1/%1 [R=301,L]

RewriteCond %{QUERY_STRING} buch=(.+)&seite=([0-9]+)
RewriteRule ^searchb\.php$ https://www.example.com/%1/%2 [R=301,L]

%1, %2 nehmen geklammerte Ausdrücke aus der RewriteCond wieder auf, $1, $2 etc. aus der RewriteRule

29.09.2020 20:14 | geändert: 29.09.2020 20:18

16 WhiteWay

Das ? soll natürlich ein & sein. Am besten noch einmal von vorne.

1. Die eigentliche php-Datei mit den beiden Parametern ist
https://www.domain.de/de/seiten/buch.php?buch=suchwort&seite=seitenzahl

2. Die alte Umleitung erfolgte auf
https://www.domain.de/buch/suchwort&seite=seitenzahl

3. Die neue Umleitung ist jetzt
https://www.domain.de/buch/suchwort/seitenzahl

Jetzt soll 1. auf 3. umgeschrieben werden, wenn es im Browser aufgerufen wird.

Und 2. soll umgeleitet werden auf 3., wenn es im Browser aufgerufen wird.

So müsste es richtig sein.

30.09.2020 09:55

17 Jörg Kruse

2. Die alte Umleitung erfolgte auf
https://www.domain.de/buch/suchwort&seite=seitenzahl

Und genau da lag schon das Problem. Korrekt wäre hier ein "?" gewesen. Mit dem "&" hinter "suchwort" hast du eine URL konstruiert, die das CMS nicht mehr vernünftig analysieren kann.

Ich denke, es ist sinnvoll, wenn du dir mal den Aufbau einer URL klarmachst:

https://de.wikipedia.org/wiki/Uniform_Resource_Locator

... und dann noch speziell zum URL-Bestandteil Query-String:

https://de.wikipedia.org/wiki/Query-String

... und dann verstehst, wann ein "?" und wann ein "&" zum Einsatz kommt.

30.09.2020 11:23

18 WhiteWay

Das ist mir eigentlich schon klar. Ich vermute, das kam durch das [QSA] zustande, daß der erste Parameter auf ein Verzeichnis umgeschrieben wurde und der weitere Parameter mit einem &seite=seitenzahl hinten angehängt wurde. Die Seiten sind so nun einmal im G.-Index und ich muss die irgendwie umleiten.

30.09.2020 11:37

19 Jörg Kruse

Naja, du hattest schon in Beitrag 7 und 9 das & statt des ? in den Wunsch-URLs und ich hatte das Gefühl, dass du meine Hinweise dahingehend konsequent ignorierst.

Jetzt soll 1. auf 3. umgeschrieben werden, wenn es im Browser aufgerufen wird.

Das habe ich ja schon in Beitrag 15 erklärt (zweite Weiterleitung im Code)

Und 2. soll umgeleitet werden auf 3., wenn es im Browser aufgerufen wird.

Wenn das & fälschlicherweise im Pfad enthalten ist, dann würde ich es so probieren:

RewriteRule ^buch/(.+)&seite=([0-9]+)$ https://www.example.com/buch/$1/$2 [R=301,L]

30.09.2020 12:07 | geändert: 30.09.2020 12:10

20 WhiteWay

Danke, das mit dem & umleiten war erfolgreich, aber mit der Regel aus Post 15 klappt es nicht. Ist da die Reihenfolge der Regeln vielleicht noch wichtig?

Ich habe aktuell zuerst meine Umleitung, dann Deine aus dem letzten Post und dann die aus Post 15 versucht.

30.09.2020 12:36