BelaCe: Frage zu mod_rewrite-Rule und htaccess

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

  1. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. 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

  2. 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

  3. 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