Sven Rautenberg: help: perl kann kein print "Location: " ausführen??

Beitrag lesen

Aloha!

Ich habe im Verzeichnis "hugo" ein .htaccess dokument mit
ErrorDocument 404   /cgi/perl.cgi

Dieses tut genau, was es soll, nämlich im Fall eines Aufruf eines nicht existierenden Dokuments das Programm perl.cgi aufrufen.

im Programm perl.cgi steht nichts anderes als

#!/usr/bin/perl -w
print "Location: http://www.meineseite.com/error.shtml\n\n";
exit(0);

Wenn alles, was du tun willst, ein Redirect im Fehlerfall ist, warum machst du dann nicht einfach das hier:

ErrorDocument 404 http://www.meineseite.com/error.shtml

Die Angabe einer vollständigen URL erzeugt im Falle des Falles keinen Statuscode 404, sondern einen 302 Redirect auf die angegebene URL. Die URL erscheint dabei natürlich in der Browserzeile, und diverse Mechanismen von Suchmaschinen, die 404 auswerten würden, nun aber auf 302 treffen werden vermutlich deine Fehlerseite indizieren.

Hintergrund; Ich will statische URLs angeben, deren Content aber durch ein perlskript dynamisch generiert wird.

Dann willst du an der 404-Sache nicht rumschrauben! 404 ist dann, wenn der Server für die Ressoure nichts gefunden hat. Du willst aber was finden, nämlich deine Seite. Wäre dumm, wenn deine Methode funktionieren würde, aber Suchmaschinen aufgrund von 404 die Seite nicht indizieren.

Informiere dich über URL-Rewriting. mod_rewrite ist sozusagen die Eierlegende Wollmilchsau, was die Umwandlung von Browser-URL in server-verwendbare URL angeht - alles ganz geheim im Hintergrund, wenn es sein soll.

Beispielanwendung (habe ich gerade für eine Seite benutzt):
RewriteEngine on

Wenn die angeforderte Seite auf .html endet und existiert,

dann /index.php aufrufen (Auswertung der abgerufenen Seite erfolgt dort)

RewriteCond /pfad/zum/document_root/%{REQUEST_FILENAME} -f
RewriteRule ^/(.*.html)$ /index.php

Interessanterweise funktioniert das auch mit URL-Parametern - warum, hab ich noch nicht so ganz herausgefunden. Vermutlich werden die im ersten Teil der RewriteRule einfach nicht beachtet - ist ja kein Teil des Ressourcennamens, sondern nur eine Info für die Ressource.

- Sven Rautenberg