mod_rewrite und ein Standartanfang?

B

BartTheDevil89

Guest
Hallo,

ich habe hier ne Menge Links in der Form:

www.domain.de/sa/22/55/link.htm
www.domain.de/as/34/23/nocheinlink.htm
www.domain.de/ble/32/212/vieles/mehr.htm

Also das ganze hat immer folgenden Aufbau:

DOMAIN/einBegriff/ID/ID/hierkannesbeliebig weitergehen

Jetzt hab ich folgende Frage: Kann man erstmal eine Art Standard für den Bereich am Anfang schaffen?

www.domain.de/be/22/44/link.htm
Regel: /(*.)/([0-9]+)/([0-9]+)/(*.).htm auf index.php?data1=$1&data2=$2&data3=$3&site=$4

www.domain.de/vd/33/234/auto/oma.htm
Regel: /(*.)/([0-9]+)/([0-9]+)/auto/(*.).htm auf index.php?data1=$1&data2=$2&data3=$3&bereich=hier&zugabe=$4

Und die haben ja alle den gleichen Grundaufbau mit

www.domain.de/BUCHSTABEN/ZIFFER/ZIFFER auf index.php?data1=$1&data2=$2&data3=$3

Das wäre ja eigentlich die Regel. Aber kann ich dieses

Regel: /(*.)/([0-9]+)/([0-9]+)/ auf index.php?data1=$1&data2=$2&data3=$3

als Standard irgendwie festlegen, sodas ich dann nurnoch die weiteren Links angeben muss?

Also geht eben vor allem darum, dass ich die weiteren Rewrite-Regeln nicht immer alle mit dem Anfang so machen muss, sondern eben nur das Ende varrieren muss. Natürlich ist mir klar, dass meine zwei Beispielenden jetzt hier nicht viel Sinn machen, es geht nur ums Prinzip.

Über ein anderes Forum hab ich schon den Ansatz hier gehört, aber irgendwie verstehen tue ich es leider nicht:

CODE
RewriteRule ^[^/]+/(\d+)/(\d+)/(.*) $1?data1=$2&data2=$3 [QSA]
RewriteRule ^([^/.]+)\.htm$ index.php?link=$1 [L,QSA]
RewriteRule ^([^/.]+)/([^/.]+)\.htm$ index.php?link=$1&sublink=mehr [L,QSA]

 
Du musst für jede Tiefe eine neue Regel erstellen, sonst bekommst du Probleme mit der genauen Zuordnung durch htaccess.

D.h. :

domain.de/sa/22/55/link.html

hat eine andere Regel wie:

domain.de/sa/22/55/link/oma.html

Allerdings geht es hier um die Tiefe nicht um die unterschiedlichen Namen, denn du kannst jede neue Tiefe mit einer Variable festlegen und übergeben, für die Beispiele oben wäre das dann:

/(*.)/([0-9]+)/([0-9]+)/(*.).html auf index.php?data1=$1&data2=$2&data3=$3&site=$4

und

/(*.)/([0-9]+)/([0-9]+)/(*.)/(*.).html auf index.php?data1=$1&data2=$2&data3=$3&data=$4&site=$5
 
Ja aber genau das möchte ich ja vermeiden^^...deswegen auch die frage. Denn damit werden die Regeln extrem lang und wenn ich an diesem Anfang mal was ändern muss, muss ich ja durch alles einzeln durchgehen. Aber gut, wenns nicht anders geht, dann muss ich es wohl so machen.

Aber eine Frage noch: Kann man eine Eingabe auch auf paar Werte begrenzen? Also festlegen, dass im ersten (*.) nur as,dke,ad,edd,ed drin stehen kann? Bzw. wie wirkt sich das auf die Performance auf? Also ist es sinnvoller solche Möglichkeiten festzulegen oder einfach für jede Möglichkeit eine Regel zu machen ala:

/as/([0-9]+)/([0-9]+)/(*.).html auf index.php?data1=as&data2=$1&data3=$2&site=$3
/dke/([0-9]+)/([0-9]+)/(*.).html auf index.php?data1=dke&data2=$1&data3=$2&site=$3

und

/as/([0-9]+)/([0-9]+)/(*.)/(*.).html auf index.php?data1=as&data2=$1&data3=$2&data=$3&site=$4
/dke/([0-9]+)/([0-9]+)/(*.)/(*.).html auf index.php?data1=dke&data2=$1&data3=$2&data=$3&site=$4

oder sowas in der Art?

/(*.;aber nur as,dke...)/([0-9]+)/([0-9]+)/(*.).html auf index.php?data1=$1&data2=$2&data3=$3&site=$4

und

/(*.;aber nur as,dke...)/([0-9]+)/([0-9]+)/(*.)/(*.).html auf index.php?data1=$1&data2=$2&data3=$3&data=$4&site=$5


Danke

 
Also ich habe die Erfahrung gemacht, um so mehr Regeln umso schlechter die Performance, versuche es deshalb auf ein weniges zu beschränken.

In wie fern du die Parameter dann einschränkst musst du selbst entscheiden, die Möglichkeit das du es beschränkst besteht, dafür gibt es ja die RegEx Sachen innerhalb von mod_rewrite, wenn dir modrewrite.de da nicht weiterhilft, denke ich das du bei Google einiges zu dem Thema finden wirst, wie du die RegEx Sachen am besten anwendest.

Beispiel - Regex für Beschränkung auf Buchstabengruppe dde oder ddk:

dde|ddk
 
Zurück
Oben