Zur Navigation

Mehrere vom Aufbau her gleiche URL unterschiedlich rewriten

1 Mike (Gast)

Hallo Jörg,

ich hoffe, dass ich hier Hilfe bekommen kann, nachdem ich als Neuling verzweifelt habe, eine Lösung für mein Problem zu finden.

Ich habe eine Webseite mit den folgenden URLs:

https://example.com/templates/hamburg.php?sprache=de&stadt=hamburg
https://example.com/templates/muenchen.php?sprache=de&stadt=muenchen
https://example.com/templates/berlin.php?sprache=de&stadt=berlin

Diese URLs sollen nun schön dargestellt werden:

https://example.com/de/hamburg.html
https://example.com/de/muenchen.html
https://example.com/de/berlin.html

Da sich die Sprache als auch die Stadtnamen ändern sollen ist mein Ansatz hierfür folgender:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /templates/hamburg.php?sprache=$1&stadt=$2 [L]
RewriteRule ^([^/]*)/([^/]*)\.html$ /templates/muenchen.php?sprache=$1&stadt=$2 [L]
RewriteRule ^([^/]*)/([^/]*)\.html$ /templates/berlin.php?sprache=$1&stadt=$2 [L]

Das Problem bei dieser Schreibweise ist, dass .htaccess die erste RewriteRule (mit hamburg) nimmt und sie unendlich auch auf alle anderen URLs anwendet. Logischerweise erhalte ich bei Eingabe der zweiten (https://example.com/de/muenchen.html) und dritten URL (https://example.com/de/berlin.html) aber einen Fehler.

Mein Frage hierbei: Wie kann ich den HTACCESS-Code gestalten, dass alle 3 URLs aufgerufen werden können?

Vielen Dank
Beste Grüße
Mike

05.03.2022 22:48

2 Jörg Kruse

Du kannst die Variable $2 zweimal einsetzen:

RewriteRule ^([^/]*)/([^/]*)\.html$ /templates/$2.php?sprache=$1&stadt=$2 [L]

05.03.2022 23:33

3 Mike (Gast)

Hallo Jörg,

da habe ich den Wald vor lauter Bäumen nicht gesehen. Es funktioniert prima. super. Genial. Vielen Dank für die superschnelle Hilfe

Beste Grüße
Mike

06.03.2022 11:11

4 Mike (Gast)

Hallo lieber Jörg,
jetzt habe ich aber doch noch ein weiteres Problemchen. Vielleicht kannst Du mir auch dabei noch einmal helfen.

Ich habe nun zwei unterschiedliche Seiten, die vom Aufbau her wieder gleich sind.

https://example.com/templates/norden.php?sprache=de&cityid=1&stadt=hamburg&title=regen-im-anmarsch

https://example.com/templates/sueden.php?sprache=de&cityid=2&stadt=muenchen&title=schnee-im-anmarsch

Auch hier würde ich gerne wieder zwei schöne Links generieren wie:

https://example.com/de/1/hamburg/regen-im-anmarsch.html
https://example.com/de/2/muenchen/schnee-im-anmarsch.html

Auch hier geht wieder nur der erste Link (Hamburg), nicht aber der zweite (Muenchen). Diesmal kann ich hier auch nicht mit der gleichen Variable arbeiten, da sich der Link nach Sprachänderung auch aendert. Also wenn ich auf English stelle sieht das ganze so aus:

https://example.com/templates/norden.php?sprache=en&cityid=1&stadt=hamburg&title=rain-is-coming

https://example.com/templates/sueden.php?sprache=en&cityid=2&stadt=munich&title=snow-coming

Entsprechend sollte das Ergebnis dann so aussehen:

https://example.com/en/1/hamburg/rain-is-coming.html
https://example.com/en/2/munich/snow-coming.html

Wieder ist mein Ansatz folgender:

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /templates/norden.php?sprache=$1&cityid=$2&stadt=$3&title=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /templates/sueden.php?sprache=$1&cityid=$2&stadt=$3&title=$4 [L]

Leider habe ich hierbei nicht zwei gleiche Inhalte, bei denen ich eine Variable doppelt verwenden könnte. Auch einen prefix würde ich nur sehr ungern verwenden, da dadurch die End-Urls immer anders aussehen.

Hättest Du da eine Idee, wie ich dieses Problemchen lösen könnte?

Vielen Dank
Beste Grüße
Mike

06.03.2022 12:32

5 Jörg Kruse

Wenn du "norden" bzw. "sueden" noch mit in die "schöne URL" einbaust, kannst du diese als fünfte Variable rewriten.

06.03.2022 13:36

6 Mike (Gast)

Du meinst so, wie in meiner ersten Frage. Dass ich dann eine Variable fuer Norden und Sueden setzen kann?

zb so

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /templates/$5.php?sprache=$1&cityid=$2&stadt=$3&title=$4&location=$5 [L]

Verstehe das Prinzip. Daran dachte ich auch schon. Das einzige Problem dabei ist, dass sich der Name norden und sueden im link natuerlich nicht aendert. Die Ausgabe in z. b englischer Version waere dann zb:

https://example.com/en/2/munich/snow-coming/sueden.html

Da waere dann die ganze URL auf Englisch, nur leider ein Wort bliene Deutsch. Das koennte ich zwar in PHP auf Englisch ausgeben, dann wiederum braeuchte ich mehrere Kopien der PHP-Datei: zb. sueden. php, south.php, sur. php.

Also wenn ich das so richtig verstanden habe???

Danke Dir
Beste Gruesse
Mike

06.03.2022 14:10

7 Jörg Kruse

Du könntest auch IDs verwenden oder die Kürzel n, s, w und e. norden.php benennst du dann einfach um in n.php.

Oder du machst eine Fallunterscheidung in einer gemeinsamen PHP-Datei, z.B.:

<?php

switch ($_GET['location']) {
    case 'norden':
    case 'north':
        $file = 'norden.php';
        break;
    case 'sueden':
    case 'south':
        $file = 'south.php';
        break;
    default:
        $file = '404.php';
}

include ($file);

06.03.2022 16:20 | geändert: 06.03.2022 16:22

8 Mike (Gast)

Klasse,

Die Fallunterscheidung finde ich super. Das werde ich direkt versuchen. Somit bleibt die URL dann recht minimal und ohne zusaetzliche Variablen, IDs, Kuerzel, etc.

Vielen Dank
Beste Gruesse
Mike

06.03.2022 17:02

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]