mikrocontroller.net

Forum: PC-Programmierung mod_rewrite Frage


Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
ich Stehe vor folgendem Problem:
In einem Verzeichnis, nennen wir es /bar, existiert eine Datei Namens 
foo. Ich möchte auf diese via HTTP mit /foo zugreifen. mod_rewrite soll 
also zuerst nach der Datei im Verzeichnis / suchen, falls sie dort nicht 
existiert, soll die entsprechende Datei unter /bar gesucht werden.

MfG Lukas

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich check zwar nicht warum alle Welt immer auf dieses Foo/Bar Quatsch 
steht, daher kann ich nur mit einem "normalem" Beispiel dienen ;)
#Weiterleitung für default Files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^css/(.+)$ default/css/$1 [L]

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das ganze hat bei mir noch einen kleinen Schönheitsfehler:
Wenn die angefragte Datei in keinem der Verzeichnisse existiert kommt 
ein unbeholfener 500 Internal server error statt ein 404 :(
'Ne Idee wie man das beheben kann (hab von mod_rewrite und regex nahezu 
keine Ahnung und weiß nicht, mit was ich google füttern soll)

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte eigentlich nicht sein, wenn die Datei nicht existiert solle 
ein 404 Fehler geliefert werden, zeig doch mal deine htaccess Datei.

Luk4s K. schrieb:
> hab von mod_rewrite und regex nahezu
> keine Ahnung und weiß nicht, mit was ich Google füttern soll
Na z.B. mit "htaccess modrewrite" oder "Regularexpressions" da gibt es 
hunderte von Tutorials, Websites und Beispielen...

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier die .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ ablage/$1

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt das [L] für leave = Bei matching dieser Regel beenden, so 
erzeugst du eine Endlosrekursion wenn die Datei nicht existiert!
(siehe obiges Beispiel)

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun sieht die .htaccess so aus:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ ablage/$1  [L]
Und es gibt bei nicht existierender Datei immer noch einen 500 error.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert es den schon für existierende Dateien. Jeweils in dem einen 
oder dem anderen Ordner?

Fehler 500 deutet meist darauf hin, das du noch Optionen setzen musst 
wie z.B. RewriteBase o.ä.

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi .. schrieb:
> Funktioniert es den schon für existierende Dateien. Jeweils in dem einen
> oder dem anderen Ordner?

Ja, die Umleitung funktioniert, nur wenn die Datei in keinem der beiden 
Ordner ist gibt es den 500 Fehler.
Beispiel:
Datei gluc.png liegt im Order /
http://0x83.eu/gluc.png
Datei tdr.png liegt im Order /ablage
Geht so: http://0x83.eu/ablage/tdr.png
So auch: http://0x83.eu/tdr.png
Bei einer nicht existenten Datei:
z.B. http://0x83.eu/gibtnsnich -> 500

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglichwerweise macht es Probleme das du da im root Verzeichnis 
operierst. Hast du es mal in einem Unterordner probiert?
Ich könnte mir nämlich noch vorstellen, das der Server ggf. eine 404 
Fehlerseite im rootfolder sucht, du durch deine mod_regel allerdings 
alle Dateinamen/Dateien erfasst.

Du könntest auch mal folgende Abwandlung versuchen
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.png$ ablage/$1.png  [L]
Das sollte dann nurnoch auch PNG Dateien Einfluss haben.

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre eigentlich nicht Sinn der Übung, nur einen bestimmten Dateityp 
umzuleiten.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja solange du keinen Zugriff auf das mod_rewrite debug/error Modul hat 
muß man aber erstmal schauen wo das Problem liegt/liegen könnte... 
Optimieren kann man dann immer noch.

Man könnte nämlich wenn es das Problem ist, folgendes versuchen
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ablage/(.+)$ ablage/gibtesgarantiertnicht.htmlpgztz  [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ ablage/$1  [L]

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, so bin ich zufrieden :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.