Fabricas: Mod_Rewrite

Hallo Leute

Ich versuche gerade mod_rewrite aus, jedoch gelingt mir dies nicht so ganz :D

Ich möchte, dass aus dieser URL: www.domain.de/newsarchiv/10.html das wird: index.php?site=newsarchiv&id=10

Allerdings speichert mir mod_rewrite newsarchiv/10 in die variable site.

Hier mein .htacces file:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*).html$ index.php?site=$1
RewriteRule ^(.*+)/([0-9]+).html$ index.php?site=$1&id=$2 [L]

Die erste Regel funktioniert einwandfrei wenn z.B. nur www.domain.de/index.html eingegeben wird.

Könnt ihr mir vielleicht weiter helfen?

  1. Hi,

    Allerdings speichert mir mod_rewrite newsarchiv/10 in die variable site.

    Klar, darauf trifft die erste Regel ja auch zu.

    RewriteRule ^(.*).html$ index.php?site=$1
    RewriteRule ^(.*+)/([0-9]+).html$ index.php?site=$1&id=$2 [L]

    Die erste Regel funktioniert einwandfrei wenn z.B. nur www.domain.de/index.html eingegeben wird.

    Könnt ihr mir vielleicht weiter helfen?

    RewriteRules werden der Reihe nach abgearbeitet.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Moin,

      RewriteRules werden der Reihe nach abgearbeitet.

      Wird nicht aber die _letzte_ zutreffende Regel angewendet!? Mir war so...

      Grüße Marco

      1. Hi!

        RewriteRules werden der Reihe nach abgearbeitet.

        Und nicht nur das, der umgeschriebene Request wird intern erneut durch den Apachen geschickt, so dass die Regeln unter Umständen mehrfach zur Anwendung kommen, wenn man nichts dagegen unternimmt (zum Beispiel das Umschreiben nicht auszuführen, wenn der Request auf eine real existierende Datei verweist)

        Wird nicht aber die _letzte_ zutreffende Regel angewendet!? Mir war so...

        Nein, denn dann bräuchte man das L-Flag nicht.

        Lo!

  2. Moin,

    RewriteRule ^(.*+)/([0-9]+).html$ index.php?site=$1&id=$2 [L]

    Ich bin mir jetzt nicht ganz sicher, ob mod_rewrite das anders handhabt, aber vom klassischen RegEx her müsste es IMHO folgendermaßen heißen:

    RewriteRule ^([^/]*)/([0-9]+).html$ index.php?site$2&id=$2

    Grüße Marco

    1. Moin,

      RewriteRule ^([^/]*)/([0-9]+).html$ index.php?site$2&id=$2

      Selbst das ist gelogen -.-"
      So:
      RewriteRule ^([^/]*)/([0-9]+).html$ index.php?site$2&id=$2
                      ^ da der Slash nicht escaped werden muss.

      Grüße Marco