Zur Navigation

Alle Parameter als sprechende URL darstellen

1 Chrissi01 (Gast)

Hallo zusammen,

gibt es eine Möglichkeit, alle Parameter einer Webseite als sprechende URLs darzustellen, dabei aber nur ausgewählte Parameter abzubilden(und "unwichtige" wegzulassen)?

Beispiel:
Aus:
www.example.org/immobilien/index.php?clearFilters=1&filter[city]=Dresden&filter[status]=published
soll werden:
www.example.org/immobilien/dresden

Vielen Dank für alle Anregungen!

Viele Grüße
Chrissi

25.04.2016 19:28

2 Jörg Kruse

.htaccess Datei im Verzeichnis "/immobilien":

RewriteEngine on

RewriteBase /immobilien/

RewriteRule ^([^\./]+)$ index.php?clearFilters=1&filter[city]=$1&filter[status]=published

[^\./]+ sind mehrere Zeichen außer Punkt und Slash, so dass Dateinamen (index.php) und Strings mit mehreren Verzeichnisebenen nicht rewritet werden

25.04.2016 19:59 | geändert: 25.04.2016 19:59

3 Chrissi01 (Gast)

Danke, das klappt schon ganz gut. Allerdings hätte ich gern eine Weiterleitung, sodass die alte URL im Browser + Suchmaschine gar nicht mehr auftaucht, sondern immer zur neuen URL weitergeleitet wird, wenn die Alte aufgerufen wird.

25.04.2016 20:55

4 Jörg Kruse

Das könnte so funktionieren:

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

25.04.2016 21:25 | geändert: 25.04.2016 21:26

5 Chrissi01 (Gast)

Mann bist du schnell ;) und klappt super! Danke!!
Eine Frage noch, der Parameter "City" ist jetzt großgeschrieben, kann man das irgendwie klein geschrieben ausgeben?

Statt so
http://www.example.org/immobilien/Dresden
besser so:
http://www.example.org/immobilien/dresden

25.04.2016 22:35

6 Jörg Kruse

Mit mod_rewrite geht das nicht.

Du könntest allenfalls eine Weiterleitung in das PHP-Script einbauen, unter Verwendung von strtolower().

26.04.2016 09:07

7 Chrissi01 (Gast)

Ah ok. Danke für die Info.

Dein Code von oben funktioniert zwar toll, allerdings weiß ich nicht, ob ich nur bestimmte URLs in sprechende umwandeln soll, andere aber wieder nicht. Das ist natürlich nicht so "sauber". Könnte man auch mit einem htaccess-Eintrag generell ALLE URLs mit Parametern in sprechende URLs umwandeln? (evtl. eine htaccess pro Ordner?)

z.B.
www.example.org/anfrage.php?view=anfrage
umwandeln in:
www.example.org/anfrage

Oder eben:
www.example.org/immobilien/index.php?clearFilters=1&filter[city]=Dresden&filter[status]=published
in:
www.example.org/immobilien/1/Dresden/published

PS. Und natürlich wieder beim Aufruf der alten URL gleich die Neue anzeigen.

Gruß
Chrissi

26.04.2016 10:49

8 Jörg Kruse

Die Werte kannst du alle durch ([^\./]+) ersetzen, und dann mit %1, %2, %3 bzw. $1, $2, $3 wieder aufgreifen:

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

Der letzte Wert in der RewriteCond sollte das Leerzeichen mit ausschließen, also ([^\./\ ]+), da dieses in der Abfrage (THE_REQUEST) das Ende des URI markiert

26.04.2016 11:44 | geändert: 26.04.2016 11:45

9 Chriss01 (Gast)

Danke, dass klappt gut, allerdings stimmen die Pfade zu Bildern wohl jetzt nicht mehr und wenn ich auf der Seite dann einen Link klicke, passiert folgendes: "published" wird entfernt und der Link wird einfach angehangen. Natürlich gibt's einen 404er.

Original:
www.example.org/immobilien/1/Dresden/published

Nach Aufruf von /immobilien/expose.php?id=3:
www.example.org/immobilien/1/Dresden/expose.php?id=3

26.04.2016 13:00

10 Jörg Kruse

Ja, die Links und Pfade für Bilder, CSS- und JS-Dateien müssen natürlich angepasst werden.

Idealerweise sollte mit absoluten statt mit relativen Pfaden verlinkt werden:

<a href="/immobilien/expose.php?id=3">Blabla</a>

... dann stimmt der Pfad unabhängig von der Verzeichnistiefe der URL

26.04.2016 13:19