Zur Navigation

Alle Parameter als sprechende URL darstellen [2]

11 Chrissi01 (Gast)

Jo, vielen Dank nochmal! Dann werd ich mal schauen.

Gruss
Chrissi

PS. Beim absenden eines Beitrages werde ich immer wieder ausgeloggt, und kann nur als Gast schreiben. (Cookies sind erlaubt). Ansonsten aber ein empfehlenswertes Forum! ;)

26.04.2016 14:04

13 Chrissi01 (Gast)

Hallo Jörg,

ich hätte nochmal eine Frage zum eigentlichen Problem. Wäre es möglich, nur bestimmte Parameter darzustellen, alle nicht relevanten sollen entfernt werden.

Im Detail heißt das, alle URLs die folgende Parameter NICHT enthalten, sollen auf die index.php weitergeleitet werden. Enthält eine URL hingegen eine der 3 Parameter, sollen dieser auch dargestellt werden.
filter[city]=(.*)
filter[action]=(.*)
filter[type]=(.*)

Beispiel 1:
http://www.example.org/immobilien/index.php?clearFilters=1&filter[status]=published > http://www.example.org/immobilien

Beispiel 2:
http://www.example.org/immobilien/index.php?clearFilters=1&filter[city]=Dresden&filter[status]=published > http://www.example.org/immobilien/index.php?filter[city]=Dresden

Sowas hatte ich mal probiert:
RewriteEngine on
RewriteCond %{QUERY_STRING}! ^(filter\[city\]=([^\./]+))|(filter\[action\]=([^\./]+))|(filter\[type\]=([^\./]+))$
RewriteRule ^(.*)$ /immobilien/?

Gruß
Chrissi

27.04.2016 15:55

14 Chrissi01 (Gast)

Edit:

Beispiel 2 vielleicht lieber wieder so (mit sprechender URL):
http://www.example.org/immobilien/index.php?clearFilters=1&filter[city]=Dresden&filter[status]=published > http://www.example.org/immobilien/Dresden

27.04.2016 15:59

15 Jörg Kruse

Zuerst die Weiterleitungen mit Parametern, die rewritet werden, und als letztes die Weiterleitung aller übrigen URLs mit Query String:

RewriteEngine on                                                                
                                                                                
RewriteCond %{THE_REQUEST} filter\[city\]=([^&\ ]+)
RewriteRule ^immobilien/index\.php$ http://example.org/immobilien/%1? [L,R=301]
# ...
RewriteCond %{THE_REQUEST} \?[^\ ]
RewriteRule ^immobilien/index\.php$ http://example.org/immobilien/? [L,R=301]

Das Flag L sollte dafür sorgen, dass nur die erste zutreffende Rule zum Tragen kommt

"\?[^\ ]" bedeutet dass die URL ein Fragezeichen plus ein darauffolgendes Nicht-Leerzeichen enthält, also einen (nicht leeren) Query String

27.04.2016 16:32 | geändert: 27.04.2016 16:32

16 Chrissi01 (Gast)

Hallo Jörg,

leider passiert da gar nichts. Wenn ich die URLs aufrufe, werden die angezeigt wie immer.

27.04.2016 17:11

17 Jörg Kruse

Wenn ich die URLs aufrufe, werden die angezeigt wie immer.

Das heißt die URL ändert sich nicht?

Die .htaccess Datei muss im Wurzelverzeichnis der Domain liegen - ist das der Fall? (ich war dabei von deiner .htaccess Datei in Beitrag 13 ausgegangen)

Falls ja: möglicherweise hilft noch die Angabe einer RewriteBase:

RewriteBase /

27.04.2016 20:28

18 Chrissi01 (Gast)

So klappt das jetzt mit dem Filter[City] aber beim zurücksetzen aller Filter (index.php?clearFilters=1&filter[status]=published) d.h. alle Immobilien sollen wieder angezeigt werden, benötige ich doch die obigen 2 Parameter, sonst bleibt immer der Filter[City] aktiv. Vielleicht kann man da eine Ausnahme einbauen, dass die Parameter zwar ausgeführt, aber nicht angezeigt werden werden?

RewriteEngine on
RewriteBase /immobilien/
RewriteCond %{THE_REQUEST} filter\[city\]=([^&\ ]+)
RewriteRule ^index\.php$ http://www.example.de/immobilien/%1? [L,R=301]
RewriteRule ^([^\./]+)$ index.php?clearFilters=1&filter[city]=$1&filter[status]=published
# ...
RewriteCond %{THE_REQUEST} \?[^\ ]
RewriteRule ^index\.php$ http://www.example.de/immobilien/? [L,R=301]

27.04.2016 22:01

19 Jörg Kruse

Vielleicht kann man da eine Ausnahme einbauen, dass die Parameter zwar ausgeführt, aber nicht angezeigt werden werden?

Dann musst du die Parameter auf anderem Weg übermitteln, z.B. über ein Cookie oder als POST-Parameter, d.h. über ein Formular statt über einen Link. Oder die Parameter werden in einer Session gespeichert, was aber auch ein (Session-)Cookie voraussetzt.

In jedem Fall muss das PHP-Script entsprechend angepasst werden.

Alternativ könntest du das PHP-Script auch so erweitern, dass nach Ausführung auf die Startseite weitergeleitet wird.

28.04.2016 13:17 | geändert: 28.04.2016 13:18

20 Chrissi01 (Gast)

Hallo Jörg,

am Script wollte ich eigentlich nicht rumfummeln. ;)

Wie würde denn der Code aussehen, wenn NUR GENAU BEI DIESEN beiden Parametern (clearFilters=1&filter[status]=published) auf die index.php weitergeleitet wird.


Nur bei dieser/n URL/Parametern:
www.example.de/immobilien/index.php?clearFilters=1&filter[status]=published
---------
Diese anzeigen:
www.example.de/immobilien/


Allerdings wieder so, dass die alte URL im Browser + Suchmaschine gar nicht mehr auftaucht, sondern immer zur neuen URL weitergeleitet wird, wenn die Alte aufgerufen wird.

Gruß
Chrissi

30.04.2016 11:57