Frage zu mod_rewrite-Rule und htaccess
BelaCe
- https
0 Beat0 BelaCe
0 hotti1 Edgar Ehritt
Hallo!
Ich möchte jetzt gern meine URLs umschreiben.
Aktuell sehen die so aus:
www.domain.de/dateiname.php?id=X
oder so
www.domain.de/dateiname.php?id=X&idx=Y
Umgeschrieben sollen sie dann so aussehen:
www.domain.de/dateiname-beliebigerText-X
bzw. so
www.domain.de/dateiname-beliebigerText-X-Y
Meine Rule sieht aktuell so aus:
RewriteRule ^(.*)-(.*)-([0-9]*)-([0-9]*)$ /$1.php?id=$3&idx=$4
Das funktioniert auch, nur in dem Falle, dass es kein "-Y" gibt, bekomme ich eine 404-Seite.
Wie kann ich das abstellen?
Sollte ich einfach zwei Rules hinschreiben.
Eine, die "-Y" beachtet und eine ohne "-Y"?
Vielen Dank,
Peter
Sollte ich einfach zwei Rules hinschreiben.
Eine, die "-Y" beachtet und eine ohne "-Y"?
Ja, aber die ohne Y zuerst.
Ob Apache in Version xy das versteht:
RewriteRule ^(.*)-(.*)-([0-9]*)(-([0-9]*))?$ /$1.php?id=$3&idx=$5
ist zu testen. Ebenso wie die Fähigkeit deiner Scripte idx= zu verarbeiten.
mfg Beat
Ob Apache in Version xy das versteht:
RewriteRule ^(.*)-(.*)-([0-9]*)(-([0-9]*))?$ /$1.php?id=$3&idx=$5
Hm, nein, das ging nicht!
Aber vielen Dank für deine Antwort!
ist zu testen. Ebenso wie die Fähigkeit deiner Scripte idx= zu verarbeiten.
Ja, das sollten sie, denn das haben sie ja vorher auch gekonnt.
Danke,
peter
hi,
Umgeschrieben sollen sie dann so aussehen:
www.domain.de/dateiname-beliebigerText-X
bzw. so
www.domain.de/dateiname-beliebigerText-X-Y
Tabelle machen [1]. Von ?id=X oder ?idx=Y nach "Gewünscht"
Dann eine rule (evntl. auch zwei) mit RegEx -X|-X-Y nach /script.php
script.php schaut dann in die Tabelle, anstatt Parameter zu parsen. Mit [1] verlierst Du auch nicht die Übersicht. Möglich ists auch, in der RegEx Klammern zu verwenden und dem Script $1, $2 usw. zu übergeben. Mit einer Tabelle, die das script.php ohnehin einliest, ist das jedoch überflüssig, sofern script.php die CGI-Umgebungsvariable REQUEST_URI [2] zur Verfügung hat.
[2] beinhaltet das was angefordert wurde.
Hotte
Hallo Peter,
RewriteRule ^(.*)-(.*)-([0-9]*)-([0-9]*)$ /$1.php?id=$3&idx=$4
es scheint mir zweifelhaft, dass ein URL http://domain.tld/dateiname-beliebigerText-- von Dir tatsächlich beabsichtigt verarbeitet werden soll. An den entsprechenden Stellen soll doch mindestens eine Zahl oder ein Buchstabe vorkommen, oder?
RewriteRule ^(.*)-(.*)-([0-9]+)-([0-9]+)$ /$1\.php?id=$3&idx=$4
RewriteRule ^(.+)-(.+)-([0-9]+)$ /$1\.php?id=$3&idx=
# fertig
Gruß aus Berlin!
eddi