mod_rewrite - was mach ich falsch?
FB1
- webserver
1 Bobby0 Christian Seiler0 FB1
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?
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
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
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
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
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 :-)
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)]