Zur Navigation

mod_rewrite Problem

1 Marco (Gast)

Ich bin noch relativ unvertraut mit Mod_rewrite. Hier habe ich schon mein erstes Problem dass mich fast zur Verzweiflung treibt:


Jetzt suche ich nach der Rewriterule die es mir ermöglicht das ganze in zwei Ebenen zu splitten:

ebene 1:

Parameter: index.php?seite=show&id=1&bez=audio-und-hifi&subid=2&bez2=discman

Pfad im Browser: /audio-und-hifi.html

ebene 2:

Parameter: index.php?seite=final&id=1&bez=audio-und-hifi&subid=2&bez2=discman

Pfad im Browser: /auto-und-hifi/discman.html

Ich habe es schon stundenlang versucht, doch wenn ich zwei Rules erstelle mischt er mir diese andauernd durcheinander.

Wäre um jede Hilfe dankbar.

Gruss Marco

15.03.2007 16:33

2 Jörg Kruse

Hallo Marco,

müsstest du nicht auch noch id und subid in die rewritete URL übernehmen, oder benötigt das Script nur die Variablen bez und bez2?

Letztere könntest du folgendermaßeno rewriten:

RewriteEngine on

RewriteBase /

RewriteRule ^([^/]+)\.html$ index.php?seite=show&id=1&bez=$1  [L]
RewriteRule ^(.+)/(.+)\.html$ index.php?seite=final&id=1&bez=$1&subid=2&bez2=$2

Das [^/] bezeichnet alle Zeichen außer einem "/" - so wird verhindert, dass diese Rule bei den URLs der zweiten Ebene greift. Du musst dann gegebenfalls nur noch schauen, dass du die IDs noch mit hineinnimmst

15.03.2007 17:10 | geändert: 15.03.2007 17:12

3 Marco (Gast)

Hallo Jörg

Das geht ja ganz schön fix hier, danke;)

Nein die ID muss sollte nicht in die URL. Alleine die bez und bez2 reichen schon.

Ich werde es gleich mal ausprobieren, melde mich nacher wieder ;)

15.03.2007 18:36

4 Marco (Gast)

Hmm ich brauch die ID's doch, ohne funktioniert es doch nicht:(

Habe den Quelltext jetzt mal nach meinen Erkenntnissen angepasst. Wärst Du auch auf dieses Resultat gekommen?

RewriteRule ^([^/]+)-([^/]+)\.html$ index.php?seite=show&id=$1&bez=$2 [L]
RewriteRule ^(.+)-(.+)/(.+)-(.+)\.html$ index.php?seite=final&id=$11&bez=$2&subid=$3&bez2=$4

Gruss Marco

15.03.2007 18:43

5 Jörg Kruse

Ja, so hätte ich's auch gemacht :)

Ist nur ein Flüchtigkeitsfehler drin: $11 für $1

15.03.2007 18:49

6 Marco (Gast)

Hmm es funktioniert leider immer noch nicht:(

mein aktuelles mod_rewrite:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.billig-kaufen\.ch$
RewriteRule ^(.*)$ http://www.billig-kaufen.ch/$1 [L,R=301]

Options FollowSymLinks
RewriteBase /
RewriteRule billig-kaufen.html index.php?seite=home
RewriteRule agb.html index.php?seite=agb
RewriteRule kontakt.html index.php?seite=kontakt
RewriteRule sitemap.html index.php?seite=sitemap
RewriteRule impressum.html index.php?seite=impressum


RewriteRule ^([^/]+)-([^/]+)\.html$ index.php?seite=show&id=1&bez=$1 [L]
RewriteRule ^(.+)-(.+)/(.+)-(.+)\.html$ index.php?seite=final&id=$1&bez=$2&subid=$3&bez2=$4

Wenn ich nun aufrufe:

http://www.billig-kaufen.ch/1-audio-und-hifi.html funktioniert alles super, wenn ich jetzt allerdings mit mod_rewrite in die Kategorie "Discman" wechseln will http://www.billig-kaufen.ch/1-audio-und-hifi/2-discman.html funktioniert es, das Layout wird aber völlig über den Müll geworfen.

Die Links sind noch mit dem volltändigen Pfad ausgestattet. Ich habe das Gefühl, dass er bei seite=final und seite=show irgend ein Problem hat. Kann das sein?

Ich habe schon einige Änderungen selber probiert, wird aber immer schlimmer :/

Ich hoffe Du hast noch ein wenig Geduld mit mir;)

Gruss Marco

15.03.2007 19:18

7 Jörg Kruse

wenn ich jetzt allerdings mit mod_rewrite in die Kategorie "Discman" wechseln will http://www.billig-kaufen.ch/1-audio-und-hifi/2-discman.html funktioniert es, das Layout wird aber völlig über den Müll geworfen.

Ja, wenn du URLs erzeugst, die (virtuelle) Verzeichnisse enthalten, musst du auch die relativen Pfade auf Bilder, Style Sheets etc. entsprechend anpassen :)

15.03.2007 19:53 | geändert: 15.03.2007 19:54

8 Marco (Gast)

Ahh okay jetzt leuchtes mir ein;)

Danke vielmals für Deine Mühe, super Forum:)

Dann werde ich es einfachheitshalber ohne Unterverzeichnisse machen, so dass man via 1-audio-und-hifi-2-discman.html zugreifen kann. Sollte ja für google usw keine Rolle spielen nehme ich mal an.

Gruss Marco

15.03.2007 20:13

9 Marco

Hmm zu früh gefreut:(

Habe mich doch noch für die virtuellen Verzeichnisse entschieden, ist ja nicht schwer die Pfade anzpassen.

http://www.billig-kaufen.ch/1-audio-und-hifi/2-discman.html ->funkioniert wie es muss
http://www.billig-kaufen.ch/index.php?seite=final&id=1&bez=audio-und-hifi&subid=2&bez2=discman -> funktioniert auch

http://www.billig-kaufen.ch/1-audio-und-hifi.html -> funktioniert leider gar nicht:(
http://www.billig-kaufen.ch/index.php?seite=show&id=1&bez=audio-und-hifi -> funktioniert hingegen

Mein Mod_rewrite schaut unterdessen so aus:

RewriteRule ^([^/]+)-([^/]+)\.html$ index.php?seite=show&id=$1&bez=$2  [L]
RewriteRule ^(.+)-(.+)/(.+)-(.+)\.html$ index.php?seite=final&id=$1&bez=$2&subid=$3&bez2=$4

Ich habe das Gefühl, dass bei der ersten Rule die id und bez nicht weitergegeben werden. Kannst du mir nochmals helfen Jörg?

Ich denke es sind jetzt keine Flüchtigkeitsfehler mehr drin.

Gruss Marco

15.03.2007 21:13 | geändert: 15.03.2007 21:16

10 Jörg Kruse

Der Server trennt womöglich bei dem falschen Trennstrich. In dem Fall sollte es helfen, die ID als Zahlen zu kennzeichnen ([0-9]):

RewriteRule ^([0-9]+)-([^/]+)\.html$ index.php?seite=show&id=$1&bez=$2  [L]

15.03.2007 21:20