Apache: Seite mit anderer Endung anzeigen
Helge Rex
- webserver
Hallo zusammen,
ich möchte erreichen, daß mein Apache (V 1.13, SuSE 7.2) eine XML-Datei ausliefert, wenn die zugehörige HTML-Datei nicht existiert.
Habe folgende Regel aufgestellt (steht in der .htaccess für das betreffende Verzeichnis):
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.+).html$ $1.xml [R]
Wenn ich jetzt "testseite.html" aufrufe, erhalte ich "Error 404", Apache liefert mir nicht die Datei "testseite.xml" zurück.
Warum nicht? Was ist an der Regel falsch?
Im Archiv und mit Google bin ich nicht fündig geworden.
Zweite Frage:
Wie erreiche ich, daß ein Parser-Script mit dem Namen der XML-Datei als Parameter aufgerufen wird, wenn die HTML-Datei nicht existiert oder älter als die zugehörige XML-Datei ist?
Auch hier bin ich nicht wirklich fündig geworden.
Gruß und Danke im Voraus
Helge
Moin!
Hallo zusammen,
ich möchte erreichen, daß mein Apache (V 1.13, SuSE 7.2) eine XML-Datei ausliefert, wenn die zugehörige HTML-Datei nicht existiert.
Habe folgende Regel aufgestellt (steht in der .htaccess für das betreffende Verzeichnis):
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.+).html$ $1.xml [R]
Deine RewriteCond greift vermutlich nicht.
-s testet laut Doku:
"'-s' (is regular file with size)
Treats the TestString as a pathname and tests if it exists and is a regular file with size greater than zero."
!-s greift also, wenn die genannte Datei nicht vorhanden ist. Aber du suchst absolut im falschen Verzeichnis, denn der nackte REQUEST_FILENAME allein ist nicht der gültige Pfadname zur Datei.
In der Doku steht zwar auch:
"REQUEST_FILENAME
The full local filesystem path to the file or script matching the request."
Das ist aber nach meiner Erfahrung relativ zum DOCUMENT_ROOT zu verstehen, der für die absolute Pfadangabe noch hinzuaddiert werden muß.
Eigentlich sollte aber immer umgeleitet werden, weil auch die vorhandenen Dateien nicht gefunden werden.
Mit mehr Error-Reporting und den Error-Logfiles (RewriteLogLevel hochsetzen) könntest du dem Fehler selbst auf die Spur kommen.
Zweite Frage:
Wie erreiche ich, daß ein Parser-Script mit dem Namen der XML-Datei als Parameter aufgerufen wird, wenn die HTML-Datei nicht existiert oder älter als die zugehörige XML-Datei ist?
Auch hier bin ich nicht wirklich fündig geworden.
Dann solltest du überlegen, ganz grundsätzlich immer das Skript aufzurufen, egal welche Datei vorhanden ist, und die Verfügbarkeit im Skript selbst prüfen. Insbesondere, weil du auch die Dateidaten prüfen willst. Im Erfolgsfall für die HTML-Datei schickst du diese einfach 1:1 an den Browser - soll XML konvertiert werden, schickst du eben das Ergebnis weg.
Das kann auch ganz ohne RewriteRule auskommen.
- Sven Rautenberg
Habe folgende Regel aufgestellt (steht in der .htaccess für das betreffende Verzeichnis):
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.+).html$ $1.xml [R]Deine RewriteCond greift vermutlich nicht.
-s testet laut Doku:
"'-s' (is regular file with size)
Treats the TestString as a pathname and tests if it exists and is a regular file with size greater than zero."!-s greift also, wenn die genannte Datei nicht vorhanden ist. Aber du suchst absolut im falschen Verzeichnis, denn der nackte REQUEST_FILENAME allein ist nicht der gültige Pfadname zur Datei.
In der Doku steht zwar auch:
"REQUEST_FILENAME
The full local filesystem path to the file or script matching the request."Das ist aber nach meiner Erfahrung relativ zum DOCUMENT_ROOT zu verstehen, der für die absolute Pfadangabe noch hinzuaddiert werden muß.
Eigentlich sollte aber immer umgeleitet werden, weil auch die vorhandenen Dateien nicht gefunden werden.
Mit mehr Error-Reporting und den Error-Logfiles (RewriteLogLevel hochsetzen) könntest du dem Fehler selbst auf die Spur kommen.
Ich habe Logging jetzt eingeschaltet:
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 9
Das Logfile wird zwar angelegt, es wird aber nichts hineingeschrieben.
Wie erreiche ich, daß ein Parser-Script mit dem Namen der XML-Datei als Parameter aufgerufen wird, wenn die HTML-Datei nicht existiert oder älter als die zugehörige XML-Datei ist?
Auch hier bin ich nicht wirklich fündig geworden.Dann solltest du überlegen, ganz grundsätzlich immer das Skript aufzurufen, egal welche Datei vorhanden ist, und die Verfügbarkeit im Skript selbst prüfen. Insbesondere, weil du auch die Dateidaten prüfen willst. Im Erfolgsfall für die HTML-Datei schickst du diese einfach 1:1 an den Browser - soll XML konvertiert werden, schickst du eben das Ergebnis weg.
Das kann auch ganz ohne RewriteRule auskommen.
Und wie muß das aussehen? Habe dafür kein passendes Beispiel gefunden.
- Sven Rautenberg
Danke und Gruß
Helge
Hi,
Hallo zusammen,
ich möchte erreichen, daß mein Apache (V 1.13, SuSE 7.2) eine XML-Datei ausliefert, wenn die zugehörige HTML-Datei nicht existiert.
RewriteEngine on
Aus der Apache Doku:
RewriteEngine
Syntax: RewriteEngine on|off
Default: RewriteEngine off
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
Der aktuelle Apache ist 1.3.28.
1.13 ist vermutlich 1.1.3?
Dann kennt der das noch gar nicht...
Ähnliches gilt für die anderen Rewrite-Teile...
cu,
Andreas
hallo Andreas,
Der aktuelle Apache ist 1.3.28.
Man sollte Apache 2.0.x nicht ganz und gar ignorieren.
1.13 ist vermutlich 1.1.3?
Nö. Die SuSE LINUX 7.2 hatte einen 1.3.13 als "default". Ich weiß im Moment nicht, ob es einen Apache 1.1.3 überhaupt jemals gegeben hat.
Aber egal: Beides (Betriebssystem und Webserver) ist auf jeden Fall zu alt und sollte schleunigst auf den aktuellen Stand gebracht werden. Bei der SuSE, wie bei allen LINUX-Distributionen, kommts nicht so sehr auf die Distributionsnummer an, sondern mehr auf die Kernelversion. Aber beim Apache kommts sehr wohl auf die Versionsnummer an. Und es ist _absolut_ kein Problem, dafür ein Update zu fahren, die entsprechenden RPM-Pakete gibts zuhauf auf den SuSE-FTP-Servern.
Dann kennt der das noch gar nicht...
Ähnliches gilt für die anderen Rewrite-Teile...
Das steht zu vermuten.
Grüße aus Berlin
Christoph S.
Hi,
Der aktuelle Apache ist 1.3.28.
Man sollte Apache 2.0.x nicht ganz und gar ignorieren.
Ich meinte ja auch den aus der 1er Serie...
1.13 ist vermutlich 1.1.3?
Nö. Die SuSE LINUX 7.2 hatte einen 1.3.13 als "default".
Da ich kein Suse habe, kann ich das nicht wissen und muß von der gegebenen Versionsnummer ausgehen...
cu,
Andreas
ich möchte erreichen, daß mein Apache (V 1.13, SuSE 7.2) eine XML-Datei ausliefert, wenn die zugehörige HTML-Datei nicht existiert.
RewriteEngine onAus der Apache Doku:
RewriteEngine
Syntax: RewriteEngine on|off
Default: RewriteEngine off
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
Kenne ich, hilft mir aber nicht weiter (habe ich berets angegeben).
Der aktuelle Apache ist 1.3.28.
1.13 ist vermutlich 1.1.3?
Dann kennt der das noch gar nicht...
Ähnliches gilt für die anderen Rewrite-Teile...
Habe jetzt mal httpd -v ausgeführt (vorher hatte ich "rpm -qa | grep apache" ausgeführt):
Server version: Apache /1.3.19 (Unix) (SuSE Linux)
Server built: Oct 21 2002 10:31:55
Werde jetzt direkt mal bei SuSE ein Update saugen.
cu,
Andreas
Danke und Gruß
Helge