FB1: mod_rewrite - was mach ich falsch?

Hallo zusammen,

ich habe drei mod_rewrite-Regeln, die man offensichtlich zusammenfassen kann:

RewriteRule ^img/([^-]+)-rotwein.png$ _images/dummyweinflasche_rot.png [L]
RewriteRule ^img/([^-]+)-weisswein.png$ _images/dummyweinflasche_weiss.png [L]
RewriteRule ^img/([^-]+)-rosewein.png$ _images/dummyweinflasche_rose.png [L]

Das Bild "/img/Chateau_Rauzan_Gassies_1945_2_Cru_Classes_Margaux-rotwein.png" soll zum Beispiel auf /_images/dummyweinflasche_rot.png umgeleitet werden. Die drei Regeln oben funktionieren wunderbar, aber wenn ich sie zusammenfassen möchte, dann klappt nichts mehr:

RewriteRule ^img/([^-]+)-(rot|weiss|rose)wein.png$ _images/dummyweinflasche_$2.png [L]

Wo liegt mein Denkfehler?

  1. Moin

    schau bitte unter http://modrewrite.de welche Bedeutung "[L]" in der .htaccess hat.

    [L] sagt: Last | Bearbeitung abschliessen, keine weiteren Regeln anwenden.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hallo!

      schau bitte unter http://modrewrite.de welche Bedeutung "[L]" in der .htaccess hat.

      [L] sagt: Last | Bearbeitung abschliessen, keine weiteren Regeln anwenden.

      Das gilt aber nur, wenn die Regel zutrifft. Wenn sie nicht zutrifft, hat [L] keine Auswirkung. Das [L] ist hier nicht der Grund.

      Viele Grüße,
      Christian

      1. Moin

        Das gilt aber nur, wenn die Regel zutrifft. Wenn sie nicht zutrifft, hat [L] keine Auswirkung. Das [L] ist hier nicht der Grund.

        Ja Sorry, hatte nur mit einem Auge gelesen und dabei den Sinn nicht richtig erfasst. hast natürlich recht

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. Hallo,

    RewriteRule ^img/([^-]+)-(rot|weiss|rose)wein.png$ _images/dummyweinflasche_$2.png [L]

    Bei mir funktioniert diese Regel wie gewünscht.

    Außerdem: Was heißt "funktioniert nicht"? Fehlermeldung? Wird nicht umgeschrieben?

    Eventuell ist es auch ein Zusammenspiel von mehreren Regeln oder anderen Konfigurationsparametern. Wie sieht Deine gesamte .htaccess-Datei aus?

    Viele Grüße,
    Christian

    1. Außerdem: Was heißt "funktioniert nicht"? Fehlermeldung? Wird nicht umgeschrieben?

      Genau, die Adresse wird nicht umgeschrieben und der Server antwortet mit 404 (not found).

      Eventuell ist es auch ein Zusammenspiel von mehreren Regeln oder anderen Konfigurationsparametern. Wie sieht Deine gesamte .htaccess-Datei aus?

      Hier mal die komplette .htaccess:

      AuthType Basic
      AuthName "Shop-Administration www.beispiel.de"
      AuthUserFile  /var/www/vhost/dev.beispiel.de/htpasswd/admin-some
      require valid-user

      RewriteEngine on
      RewriteBase /
      RewriteRule ^wein-suchen.html$ suche.php [L]
      RewriteRule ^weine-([0-9]{4}).html$ suche.php?action=1&jx=$1&jy=$1 [L]
      RewriteRule ^impressum.html$ impressum.php [L]
      RewriteRule ^preisliste.html$ download.php [L]
      RewriteRule ^preisliste.pdf$ download/preisliste.pdf [L]
      RewriteRule ^index.html$ index.php [L]
      RewriteRule ^kontakt.html$ kontakt.php [L]
      RewriteRule ^wir.html$ wir.php [L]
      RewriteRule ^agb.html$ agb.php [L]
      RewriteRule ^weinankauf.html$ weinankauf.php [L]
      RewriteRule ^regionen.html$ weinkarte/land.php [L]
      RewriteRule ^jahrgang-suche.html$ weinkarte/jg.php [L]
      RewriteRule ^preis-suche.html$ weinkarte/price.php [L]
      RewriteRule ^subskription.html$ subskription/index.php [L]
      RewriteRule ^newsletter-([0-9]+).html$ newsletter/index.php?id=$1 [L]
      RewriteRule ^newsletter/([0-9]+).html$ newsletter/index.php?page=$1 [L]
      RewriteRule ^probierpaket-([0-9]+).html$ doorpage.php?actid=$1&refid=18 [L]
      RewriteRule ^aktionen-([0-9]+).html$ aktionen.php?page=$1 [L]
      RewriteRule ^([^/]+)/([^-]+)-([0-9]+).html$ weinkarte/detail.php?modrewrite=true&checkwcg=$1&checkname=$2&artnr=$3 [R,L]
      RewriteRule ^([A-Z])([^.^/]+)([/]?)$ weinkarte/land.php?modrewrite=true&checkwcg=$1$2 [L]
      RewriteRule ^img/([^-]+)-([0-9]+).(gif|png)$ _images/artikel_img/$2.$3 [L]
      RewriteRule ^img/([^-]+)-rotwein.png$ _images/beispiel/dummyweinflasche_rot.png [L]
      RewriteRule ^img/([^-]+)-weisswein.png$ _images/beispiel/dummyweinflasche_weiss.png [L]
      RewriteRule ^img/([^-]+)-rosewein.png$ _images/beispiel/dummyweinflasche_rose.png [L]
      RewriteRule ^icon/([^-]+)-rotwein.png$ _images/beispiel/rot.png [L]
      RewriteRule ^icon/([^-]+)-weisswein.png$ _images/beispiel/weiss.png [L]
      RewriteRule ^icon/([^-]+)-rosewein.png$ _images/beispiel/rose.png [L]

      Ein weiterer komischer Fehler ist mir auch bei den letzten drei Regeln aufgefalen...Zuerst sollte das Verzeichnis "icons" heißen, aber bei fünf Buchstaben setzt die Regel auch wieder aus -> so hab ich den Singular genommen "icon". Irgendwie kann ich das garnicht nachvollziehen - irgendwie ist das ein bisschen verrückt :-)

      1. Hallo!

        Hier mal die komplette .htaccess:

        Bei mir funktioniert es problemlos (die .htaccess ist auch korrekt, so, wie sie ist, ich kann dort keinen Fehler erkennen), wenn ich die Zeilen

        RewriteRule ^img/([^-]+)-rotwein.png$ _images/beispiel/dummyweinflasche_rot.png [L]

        RewriteRule ^img/([^-]+)-weisswein.png$ _images/beispiel/dummyweinflasche_weiss.png [L]
        RewriteRule ^img/([^-]+)-rosewein.png$ _images/beispiel/dummyweinflasche_rose.png [L]

          
        durch die Zeile  
          
        
        > > > `RewriteRule ^img/([^-]+)-(rot|weiss|rose)wein\.png$ _images/dummyweinflasche_$2.png [L]`{:.language-apache}  
          
        ersetze. Gut, ich habe den AuthUserFile-Pfad noch angepasst und eine Test-.htpasswd angelegt mit Dummy-Usern, aber ansonsten Deine .htaccess nicht geändert.  
          
        Ich habe die Bilder natürlich nicht, bekomme daher einen 404er, aber in der 404er-Meldung steht:  
          
        | The requested URL /\_images/dummyweinflasche\_rot.png was not found on this server.  
          
        Also schreibt er korrekt um. Nur zum Vergleich: Mein Apache ist 2.2.8.  
          
        
        > Ein weiterer komischer Fehler ist mir auch bei den letzten drei Regeln aufgefalen...Zuerst sollte das Verzeichnis "icons" heißen, aber bei fünf Buchstaben setzt die Regel auch wieder aus -> so hab ich den Singular genommen "icon"  
          
        Das hingegen hat einen Grund: In der Default-Konfiguration des Apache ist /icons/ ein globales Alias auf das Verzeichnis in der die Symbole für die Auto-Indexes enthalten sind (ruf z.B. mal /icons/dir.gif auf, dann weißt Du, was ich meine). Wenn Du z.B. ein Verzeichnis /icons tatsächlich anlegst und dann versuchst, auf eine Datei darin zuzugreifen, wirst Du genauso scheitern, weil /icons schon vorher vom Apache umgebogen wird.  
          
        Der Alias ist auch nicht in der zugehörigen VHost-Konfiguration enthalten, der ist global definiert. Einziger Ausweg: Bitte den Serveradmin, den Alias manuell in Deiner VHost-Konfiguration zu überschreiben, d.h. einen neuen Alias in der VHost-Konfiguration zu setzen, der ungefähr so aussieht:  
          
        `Alias /icons/ /pfad/zu/deinem/DocumentRoot/icons/`{:.language-apache}  
          
        Also wenn in der VHost-Konfiguration z.B. folgendes steht:  
          
        `DocumentRoot /var/www/vhost/dev.beispiel.de/htdocs`{:.language-apache}  
          
        Dann sollte eine Zeile  
          
        `Alias /icons/ /var/www/vhost/dev.beispiel.de/htdocs/icons/`{:.language-apache}  
          
        dazu. Kann natürlich nur der Serveradmin machen, der Zugriff auf die VHost-Konfiguration hat.  
          
        Das Problem tritt aber wirklich nur bei /icons/ auf, das wie gesagt in der Standardkonfiguration als globales Alias definiert ist. Dein anderes Problem ist mir unerklärlich.  
          
        Viele Grüße,  
        Christian  
        
        -- 
        [Mein "Weblog"](http://del.icio.us/chris_se/servertipps) [[RSS](http://del.icio.us/rss/chris_se/servertipps)]