Zur Navigation

Suchmaschinenfreundliche URL´s [2]

11 tommik

Hallo,
leider funktioniert es nicht, auch wenn mir Version 2 recht plausibel erscheint.

/index.php?site=articles&kat=photoshop

Ist der eigentliche Link.
Ich versuche es anschließend mit:

/photoshop.html

Gruß,
tommik.

23.03.2006 21:20

12 Jörg Kruse

/photoshop.html kannst du aufrufen bei der ersten Version:

RewriteRule ^(.+)\.html$ index.php?site=articles&kat=$1

Das setzt voraus, dass die Variable sites stets den Wert articles hat, site=articles also kontant ist.

Andernfalls wird die zweite Version benötigt:

RewriteRule ^(.+)-(.+)\.html$ index.php?site=$1&kat=$2
... wobei du /articles-photoshop.html im Browser aufrufen musst

23.03.2006 21:47

13 tommik

Funktioniert leider beides nicht.

So sieht meine .htaccess aus

RewriteEngine On
RewriteRule ^(.+)\.html$ index.php?site=$1
RewriteRule ^(.+)\.html$ index.php?site=articles&kat=$1

Jeweils die dritte Zeile verändert... So wäre es aber theoretisch richtig?
Nicht, dass ich mir dort Fehler eingeschlichen habe.

Gruß,
tommik.

24.03.2006 13:55

14 Jörg Kruse

Die erste RewriteRule greift schon alles ab, da kommt die zweite nicht mehr zum Zuge. In solch einer Kombination von Regeln funktioniert wohl auch nur die zweite Variante, wobei die bislang erste RewriteRule nach hinten verschoben werden muss:

RewriteEngine On
RewriteRule ^(.+)-(.+)\.html$ index.php?site=$1&kat=$2
RewriteRule ^(.+)\.html$ index.php?site=$1

... und dann im Browser aufrufen als /articles-photoshop.html

24.03.2006 14:44 | geändert: 24.03.2006 14:46

15 tommik

So ... Nun funktioniert beides ;-).
Hab den anderen Code genommen, denn photoshop.html finde ich persönlich schöner.

Also hatte es nur mit der Reihenfolge zu tun? *auf den Merkzettel notiere *g**

Nachtrag: Da es noch mehr solcher Seiten gibt habe ich weitere solcher Seiten mit dem .htaccess Code darunter eingefügt. Diese Seiten funktionieren aber nicht (sind aber nach dem gleichen Schema). Muss man auf eine bestimme Reihenfolge achten?
Kann man dies irgendwo nachlesen?

Nachtrag des Nachtrags: Es funktioniert immer nur die erste Zeile und der "RewriteRule ^(.+)\.html$ index.php?site=$1" Code.

Gruß,
tommik.

24.03.2006 15:23 | geändert: 24.03.2006 15:27

16 Jörg Kruse

Die RewriteRule
^(.+)\.html$ irgendwas
ersetzt alle Adressen mit der Endung .html - andere Rules, die Adressen mit der Endung .html ersetzen wollen, gehen dann leer aus - es sei denn sie werden zuerst ausgeführt. Die Reihenfolge muss so gewählt werden, dass speziellere Ausdrücke vor den allgemeineren Ausdrücken ersetzt werden. Und zweimal hintereinander ^(.+)\.html$ funktioniert schon gar nicht, für die zweite Rule bleibt nichts mehr übrig. In solchen Fällen muss man speziellere Ausdrücke schaffen, wie z.B. ^(.+)-(.+)\.html$ - und die spezielleren Ausdrücke vor der allgemeineren ersetzen

Da es noch mehr solcher Seiten gibt habe ich weitere solcher Seiten mit dem .htaccess Code darunter eingefügt. Diese Seiten funktionieren aber nicht (sind aber nach dem gleichen Schema).

Wenn du mehrere unterschiedliche Ersetzungen haben möchtest, dann dürfen diese nicht exakt das gleiche Schema aufweisen, d.h. sie müssen sich im Suchmuster unterscheiden, denn ansonsten kommt immer nur die erste Rule zum Zuge

Noch ein Beispiel aus meinem eigenen Forum: damit die URLs für die Foren und die Threads unterschieden werden können, weisen die ersteren ein -f- auf, die letzteren ein -t-. So kommen sich die entsprechenden Rules nicht gegenseitig ins Gehege

24.03.2006 16:00 | geändert: 24.03.2006 16:06

17 tommik

D.h ich kann garnicht photoshop.html anwenden, da man dabei den Befehl ^(.+)\.html$ doppelt anwedet und somit z.B index.html nicht mehr funktioniert. Also bleibt mir nur die Wahl articles-photoshop.html zu wählen?!

Und etwas in der Folge geht auch nicht. Da funktioniert nur noch die articles - Adresse

RewriteEngine On
RewriteRule ^(.+)\.html$ index.php?site=articles&kat=$1
RewriteRule ^(.+)-(.+)\.html$ index.php?site=$1&id=$2
RewriteRule ^(.+)\.html$ index.php?site=$1

24.03.2006 16:25

18 Jörg Kruse

In deinem Beispiel kommt nur die erste Rule zum Zuge, da sie bereits alle URLs mit der Endung .html ersetzt

Also bleibt mir nur die Wahl articles-photoshop.html zu wählen?!

Ja, oder etwas anders was sich eindeutig identifizieren lässt. Man könnte z.B. statt mit einem - auch mit einem / trennen, also /articles/photoshop.html. Die Rules würden dann so ausschauen:

RewriteEngine On
RewriteRule ^(.+)/(.+)\.html$ index.php?site=$1&id=$2
RewriteRule ^(.+)\.html$ index.php?site=$1

24.03.2006 16:35 | geändert: 24.03.2006 16:36

19 tommik

Ah, vielen Dank ;-).
Nun habe ich das Prinzip,glaube ich, verstanden.
Einziges Problem:
Wenn die php Seite ein _ Zeichen in der Adresse hat. Dann funktioniert die .html Seite (mit dem htaccess Code: RewriteRule ^(.+)\.html$ index.php?site=$1) nicht.
Gibt es dafür eine Lösung?

Gruß,
tommik.

24.03.2006 17:41

20 Jörg Kruse

Ein "_" sollte eigentlich kein Problem bereiten. Kannst du mal eine Beispiel-URL nennen?

24.03.2006 19:15