• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mod Rewrite: mehrere Regeln definieren

Timmer

Mitglied
Hey, ich hab ein kleines Mod Rewrite Problem. Ich möchte mehrere Regeln definieren, damit ein Link über 4 Regeln erreichbar ist.

Hier ein kleines Beispiel:

Ursprünglicher Link:
Code:
http://domain.de/index.php?site=login&lang=de
Erreichbar über:
Code:
http://domain.de/site/de/
http://domain.de/site/de
http://domain.de/site/
http://domain.de/site
Meine jetzigen Regeln:
Code:
RewriteRule ^([^/]*)$ /index.php?site=$1
RewriteRule ^([^/]*)/$ /index.php?site=$1
RewriteRule ^([^/]*)/([^/]*)$ /index.php?site=$1&lang=$2
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?site=$1&lang=$2 [L]
Das Problem ist jetzt, dass nur die letzte der Regeln greift, bei allen anderen gibts nen 404-Error...

Ich muss dazusagen, dass ich bis jetzt noch nie mit Mod Rewrite gearbeitet habe...

[EDIT]

Jetzt gehts, woran es lag, weiß ich nicht, habe nichts verändert...

[EDIT]

Ich wollte die Regeln vereinfachen, jetzt gehts wieder nich...

Code:
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?site=$1&lang=$2 [C]
RewriteRule ^([^/]+)/?$ /index.php?site=$1 [L]

Der Aufruf von http://www.domain.de/login/de/ erzeugt einen 404 Error, der Aufruf von http://www.domain.de/login/ einen 500 Error...
 
Zuletzt bearbeitet:
Kennt jemand evtl. ein gutes Buch oder Tutorial in Bezug auf HyperText Access bzw. Mod Rewrite?

Oder kann mir jemand bei meinem obigen Problem helfen?

Danke =)

PS: Sorry für Doppelpost
 
Für einen ursprünglichen Wunsch würde das aus meiner Sicht genügen:

Code:
RewriteEngine On
RewriteRule ^(.*)/(.*) /index.php?site=$1&lang=$2 [L]
RewriteRule ^(.*) /index.php?site=$1 [L]
 
OK, danke, probier ich gleich aus, wenn ich zu Hause bin. Allerdings ist mir aufgefallen, dass das optimale Slash am Ende fehlt.

Also so:
Code:
RewriteEngine On
RewriteRule ^(.*)/(.*)/? /index.php?site=$1&lang=$2 [L]
RewriteRule ^(.*)/? /index.php?site=$1 [L]
[EDIT]

Also ich konnte es jetzt doch schnell testen, bei allen 4 Varianten, die URL aufzurufen, kommt ein 500 - Internal Server Error...

[EDIT 2]

Der Fehler konnt auch, wenn ich deinen Code unverändert in die .htaccess speichere...

[EDIT 3]

Also ich habe deinen Code nochmal genau angeschaut, statt dem [L] muss da ein [C] sein bei der ersten RewriteRule:
Code:
RewriteEngine On
RewriteRule ^(.*)/(.*) /index.php?site=$1&lang=$2 [C]
RewriteRule ^(.*) /index.php?site=$1 [L]
Jetzt habe ich mir $_GET['site'] und $_GET['lang'] ausgeben lassen, wenn ich domain.de/site/lang/ aufrufe, kommt bei site '/index.php/de/' und bei lang nichts raus...
 
Zuletzt bearbeitet:
So, ich hab mich jetzt nochmal ein bisschen mit den Rewrite Conditions auseinandergesetzt und habe schließlich die Lösung gefunden. Für alle, die eine ähnliche Lösung suchen, hier der Code für die .htaccess:

Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)/([a-z0-9_-]+)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)/([a-z0-9_-]+)/$ [NC]
RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)/?$ /index.php?site=$1&lang=$2 [NC,QSA]

RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)/$ [NC]
RewriteRule ^([a-z0-9_-]+)/?$ /index.php?site=$1 [NC,QSA]

beziehungsweise zusammengefasst:

Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)/([a-z0-9_-]+)/?$ [NC]
RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)/?$ /index.php?site=$1&lang=$2 [NC,QSA]

RewriteCond %{REQUEST_URI} ^/([a-z0-9_-]+)/?$ [NC]
RewriteRule ^([a-z0-9_-]+)/?$ /index.php?site=$1 [NC,QSA]

Timmer
 
Zurück
Oben