Sönke Gutzlaff: Apache verändert Links zu externen Seiten

Ich bin dabei ein Gästebuch zu programmieren. Dabei wird durch das flogende script der inhalt einer textdatei eingelesen und ausgegeben:

#!c:/apacheserver/perl/bin/perl.exe;
print"content-type: text/html \n\n";
print "<html>";
print "<HEAD>";
print "<TITLE>Gästebuch</TITLE>";
print "</HEAD>";
print "<BODY bgcolor=%22#ffffff%22>";
print "<body>";

$pfad="gb.txt";
open(DATEI, "$pfad");
 @text=<DATEI>;
close(DATEI);

foreach $gbtext (@text) {
   print "$gbtext";
                            }

print "</body>";
print "</hmtl>";

Der Link zur Homepage wird auch korrekt in der erzeugeten datei im quelltext angezeigt, jedoch scheint der apacheserver ihn zu verändern, so wird aus www.test.de  http://localhost/cgi-bin/www.test.de, wenn man draufklickt. Dies trit nur bei Perlscripts auf.

Meine Frage, wie muss ich apache konfigurieren, damit es Links zu externen seiten zulässt?

  1. hi,

    Der Link zur Homepage wird auch korrekt in der erzeugeten datei im quelltext angezeigt, jedoch scheint der apacheserver ihn zu verändern, so wird aus www.test.de  http://localhost/cgi-bin/www.test.de, wenn man draufklickt. Dies trit nur bei Perlscripts auf.

    Nö, das müßte auch bei allen anderen Scripts "auftreten".

    Meine Frage, wie muss ich apache konfigurieren, damit es Links zu externen seiten zulässt?

    sieh dir mal die kurzen Hinweise zu virtuellen Hosts in http://aktuell.de.selfhtml.org/artikel/server/apacheconf/index.htm an. Dein "Problem" dürfte sich von alleine lösen, sobald du dir korrekte virtuelle hosts eingerichtet hast und vor allem das cgi-bin-Verzeichnis korrekt angesprochen wird. Zu fragen bleibt allerdings, was du mit einem Gästebuch auf deinem lokalen Rechner willst. Wenn das irgendwann mal ins Netz gestellt werden soll, empfiehlt es sich doch, gleich die korrekten Adressen der künftigen Page einzusetzen und den virtuellen Host entsprechend zu konfigurieren.

    Grüße aus Berlin

    Christoph S.

  2. Hi,

    #!c:/apacheserver/perl/bin/perl.exe;

    das Semikolon darf dort nicht stehen. Zudem wäre deutlich besser:

    #!c:/apacheserver/perl/bin/perl.exe -w
    use strict;

    Mit anschließender Korrektur der Fehler, die Dir gemeldet werden.

    Übrigens hat Perl _nichts_ mit Apache zu tun, ist ergo dort eher sinnfrei installiert. Wenn Du es nach C:\usr installierst, kannst Du übrigens exakt wie bei Unix üblich "#!/usr/bin/perl -w" angeben.

    print "<BODY bgcolor=%22#ffffff%22>";

    Was sollen die %22 da drin? Das ist eine URL-Kodierung, Du hast hier aber keine URLs.

    $pfad="gb.txt";

    my $pfad = 'gb.txt'; # Nur als Hinweis...

    open(DATEI, "$pfad");

    perldoc perlfaq4
    What's wrong with always quoting "$vars"?

    open(DATEI, $pfad) or die "Kann $pfad nicht oeffnen: $!";

    Übrigens verlässt Du Dich hier darauf, dass das aktuelle Verzeichnis richtig ist - dieser Begriff ist im CGI-Kontext jedoch undefiniert; evtl. wird auch C:\gb.txt gesucht. Gib einen kompletten Pfad an.

    Der Link zur Homepage wird auch korrekt in der erzeugeten datei im quelltext angezeigt,

    Tatsächlich? Wie lautet er?

    jedoch scheint der apacheserver ihn zu verändern,

    Apache verändert nichts.

    so wird aus www.test.de  http://localhost/cgi-bin/www.test.de,

    Das ist vollkommen korrekt. Aus "script.cgi" muss an der Stelle ebenfalls "http://localhost/cgi-bin/script.cgi" werden - alles andere sollte Dir zu denken geben.

    Meine Frage, wie muss ich apache konfigurieren, damit es Links zu externen seiten zulässt?

    Merke Dir einfach folgendes:

    _   _           _                                          _           _
       | | | | ___  ___| |_ _ __   __ _ _ __ ___   ___ _ __    ___(_)_ __   __| |
       | |_| |/ _ / __| __| '_ \ / _| '\_ _ \ / _ \ '_ \  / __| | '_ \ / _` |
       |  _  | (_) \_ \ |_| | | | (_| | | | | | |  __/ | | | \_ \ | | | | (_| |
       |_| |_|\__/|___/\_|_| |_|\_,_|_| |_| |_|\__|_| |_| |___/_|_| |_|\__,_|

    _        _                   _   _ ____  _         _
              __/\| | _____(_)_ __   _____/\_ | | | |  _ | |    ___| |
              \    / |/ / _ \ | '_ \ / _ \    / | | | | |_) | |   / __| |
              /_  _\   <  __/ | | | |  __/_  _\ | |_| |  _ <| |___\_ \|
                / |_|\\__|_|_| |_|\__| /    \__/|_| \\____|___(_)

    Für einen Link brauchst Du aber eine URL. Diese ist entweder relativ zur aktuellen Location, oder aber sie beginnt mit dem Protokoll.

    Cheatah