CGI's und CSS
Johannes Gurlitt
- css
Hallo,
ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
wird klappt's über den server nicht!
print "Content-type: text/html\n\n";
print "<html><head><link rel="stylesheet" href="format.css"
Type="text/css"><title>keine Lerngeschichte
eingegeben</title></head>\n";
Gruß Johannes
Hi,
ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
wird klappt's über den server nicht!
"klappt nicht" klappt nicht. Bitte eine Fehlerbeschreibung angeben.
print "Content-type: text/html\n\n";
print "<html><head><link rel="stylesheet" href="format.css"
Type="text/css"><title>keine Lerngeschichte
eingegeben</title></head>\n";
Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.
Cheatah
Hi,
ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
wird klappt's über den server nicht!"klappt nicht" klappt nicht. Bitte eine Fehlerbeschreibung angeben.
print "Content-type: text/html\n\n";
print "<html><head><link rel="stylesheet" href="format.css"
Type="text/css"><title>keine Lerngeschichte
eingegeben</title></head>\n";Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.
Cheatah
Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis, Pfade stimmen auch.
Habe ein kleines Testprogramm gewschrieben, s.u..
Fehlermeldung bevor format.css executable: Error 500
Bad script request -- none of '/opt/local/www/server/cgi-bin/paedpsy/format.css' and '/opt/local/www/server/cgi-bin/paedpsy/format.pp.pp' is executable
Wenn chmod 755 (während ich nicht glaube, daß das nötig ist) dann wird das Programm ausgeführt, aber das Stylesheet nicht geladen!
Hier das vollständige Testprogramm:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><link rel="stylesheet" href="format.css"";
print "Type="text/css"><title>keine Lerngeschichte eingegeben</title></head>\n";
print "<body><h1>Du hast keine Geschichte eingegeben!</h1>\n";
print "Es wurde keine Lerngeschichte hinzugefügt\n";
print "bitte füge Deine Lerngeschichte ein.<p>\n";
print "<form method=GET action="$cgiurl">\n";
print "Dein Name:<input type=text name="realname" size=30 ";
print "value="$FORM{'realname'}"><br>\n";
print "E-Mail: <input type=text name="username"";
print "value="$FORM{'username'}" size=40><br>\n";
print "Lerngeschichte:<br>\n";
print "<textarea name="comments" COLS=60 ROWS=4></textarea><p>\n";
print "<input type=submit> * <input type=reset></form><hr>\n";
print "<a href="$guestbookurl">Zurrück zur Geschichtensammlung, shift f5 nicht vergessen!</a>.";
print "\n</body></html>\n";
Hallo,
print "<html><head><link rel="stylesheet" ref="format.css"";
print "Type="text/css"><title>keine Lerngeschichte
Tippfehler und eine Kleinigkeit:
Durch das in zwei print-Befehle aufgesplittete link-Tag fehlt ein Leerzeichen zwischen ref (uebrigens href) und type.
so sollte es gehen:
print "<html><head><link rel="stylesheet" href="format.css" ";
print "Type="text/css"><title>keine Lerngeschichte
SolOng
Stephan
Hi,
Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.
Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis,
dann habe ich zu sehr zu Deinen Gunsten vermutet... ;-)
In einem halbwegs vernünftig konfigurierten Server kannst Du auf nicht-ausführbare Dateien im cgi-bin nicht von außen (über HTTP) zugreifen - bestes Beispiel ist eine /cgi-bin/password.txt.
Fehlermeldung bevor format.css executable: Error 500
Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.
Hier das vollständige Testprogramm:
#!/usr/bin/perl
#!/usr/bin/perl -w
use strict;
print "Content-type: text/html\n\n";
use CGI ':standard';
print header;
print "<html><head><link rel="stylesheet" href="format.css"";
[...]
Naja, und weiter gemäß perldoc CGI. Vor allem aber nicht mehr versuchen, Dateien aus dem cgi-bin zu laden :-)
Cheatah
Fehlermeldung bevor format.css executable: Error 500
Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.
Ich denke, das hängt davon ab, welche Art der CGI-Konfiguration der Server verwendet hat.
"Normalerweise" definiert man das cgi-bin ja so, daß alles darin als CGI-Skript interpretiert wird. Kurz und prägnant, eine Zeile in der Webserver-Konfiguration und fertig. Das hat dann den Effekt, daß der Webserver auch den Zugriff auf die CSS-Datei als CGI-Call auswertet - und da diese Datei kein ausführbares Programm im Sinne des zugrundeliegenden Betriebssystems enthält, wird dieses beim Versuch, die CSS-Datei "auszuführen", einen Returncode ungleich 0 zurückliefern. Den fängt der Webserver auf und setzt ihn in einen "Internen Server-Fehler" (500) um.
Alternativ könnte man innerhalb eines cgi-bin-Verzeichnisses explizit alle Endungen definieren, die als CGI-Skript verstanden werden sollen ("AddHandler" bei Apache). Das ist natürlich mehr Pflegearbeit, weshalb es ein "fauler" Webmaster nicht tut. Es würde allerdings erlauben, das in diese Thread dargestellte CGI-Skript korrekt auszuführen, denn nun könnte der Webserver erkennen, daß die CSS-Datei aufgrund ihrer Endung eben keine CGI-Anwendung sein soll. Ob dann der Zugriff auf solche Dateien erlaubt ist (wie im Falle der CSS-Definition) oder nicht (wie im Falle der password.txt), das wiederum ist durch weitere Definitionen (separater Schutz für letztgenannte Datei) einstellbar.
Es wäre also - bei hinreichend komfortabler Konfiguration des Webservers - kein Problem, innerhalb desselben cgi-bin-Verzeichnisses gemischt Skripte, geschützte Dateien und sonstige Dateien (z. B. CSS oder auch HTML) zu lagern. Man muß es nur definieren - und darf dabei in den dann umfangreicheren Konfigurationsabschnitten den Überblick nicht verlieren, sonst handelt man sich vielleicht doch eine Sicherheitslücke ein.
Hi,
Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.
Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis,
dann habe ich zu sehr zu Deinen Gunsten vermutet... ;-)
In einem halbwegs vernünftig konfigurierten Server kannst Du auf nicht-ausführbare Dateien im cgi-bin nicht von außen (über HTTP) zugreifen - bestes Beispiel ist eine /cgi-bin/password.txt.
Fehlermeldung bevor format.css executable: Error 500
Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.
Hier das vollständige Testprogramm:
#!/usr/bin/perl#!/usr/bin/perl -w
use strict;print "Content-type: text/html\n\n";
use CGI ':standard';
print header;print "<html><head><link rel="stylesheet" href="format.css"";
[...]Naja, und weiter gemäß perldoc CGI. Vor allem aber nicht mehr versuchen, Dateien aus dem cgi-bin zu laden :-)
Cheatah
Danke an alle, das war der Fehler!
Gruß Jo
Hallo Johannes,
Ich nehme an, das das Perlscript im cgi-verzeichnis liegt. Alle Dateien im CGI-Verzeichnis werden vom Server
als CGI-Scripts angesehen. Deshalb mußt du die CSS-Datei in einem anderen Verzeichnis ablegen und
dann auch demendsprechend einbinden.
Tschüs
Daniel