Cruz: print "Location: ...."; auf Unix/Linux

Hi!

Ich habe folgendes Problem.

Ich versuche in einem Perl Script einen User auf eine URL umzuleiten. Bekanntlich geht das mit print "Location:http://www.url.com";
Mein Server (Linux oder Unix mit Apache 1.3.4 ) meint jedoch einen Error geben zu müssen:
"Premature end of script headers".

Soweit ich weiß braucht print "Location:http://www.url.com"; keinen besonderen Header...auf NT klappt es jedenfalls. Ich habe testweise mal content-type text/html davor gesetzt...das Script spuckt die Adresse richtig aus, also ist mit dem Script alles in Ordnung.

Also...wer kann mir sagen warum ich den Error kriege und wie ich es beheben kann?

Thanks
Cruz

  1. Hi!

    Ich habe folgendes Problem.

    Ich versuche in einem Perl Script einen User auf eine URL umzuleiten. Bekanntlich geht das mit print "Location:http://www.url.com";
    Mein Server (Linux oder Unix mit Apache 1.3.4 ) meint jedoch einen Error geben zu müssen:
    "Premature end of script headers".

    Soweit ich weiß braucht print "Location:http://www.url.com"; keinen besonderen Header...auf NT klappt es jedenfalls. Ich habe testweise mal content-type text/html davor gesetzt...das Script spuckt die Adresse richtig aus, also ist mit dem Script alles in Ordnung.

    Also...wer kann mir sagen warum ich den Error kriege und wie ich es beheben kann?

    probier mal:

    print "Location: http://www.url.com\n\n";

    1. Ja das war es Danke!!!!

      1. Ja das war es Danke!!!!

        Lamer!!!

        1. Ja das war es Danke!!!!

          Lamer!!!

          na das war ja echt sinnvoll...und noch nicht mal ein name dabei........würg

  2. Hi,

    Soweit ich weiß braucht print "Location:http://www.url.com"; keinen besonderen Header...

    die Lösung hat Dir Erik bereits gegeben, aber ich möchte noch etwas ausführlicher werden:

    Der Header ist die Ausgabe Deines Scripts bis zur ersten Leerzeile. Diese erhälst Du durch zwei aufeinanderfolgende Zeilenumbrüche (\n\n), bzw. genauer gesagt durch zwei Newlines (\r\n\r\n). Der Header besteht aus mehreren "Name: Wert"-Paaren, die jeweils in (mindestens) einer eigenen Zeile stehen. Bei Deiner Angabe ist nicht klar, ob der Name "Location:" oder "Location:http:" lautet - das Leerzeichen ist Pflicht! Ebenso muß jede Zeile durch ein \n (oder \r\n) abgeschlossen werden, da sonst mehrere Headerzeilen in einer Zeile stehen würden.

    Also, folgendes wäre ein Header (\n als Zeilenumbruch dargestellt):

    --- Beginn des Headers ---
    Headerzeile: Wert
    Anderer-Header: xyz
    Nochn-Header: mehrzeilig;
       also aufpassen
    Der-Letzte-Header: Schicht im Schacht

    --- Ende des Headers ---

    Wie gesagt, die Leerzeile am Ende ist wichtig. Ich hoffe, jetzt sind alle Klarheiten beseitigt - aber noch mehr hoffe ich, jetzt nix falsches erzählt zu haben, den RFC der das regelt habe ich nämlich gerade nicht parat ;-)

    Cheatah

    1. hi!

      genauer gesagt durch zwei Newlines (\r\n\r\n).

      Genaugenommen sind das keine Newlines. Eine Newline bzw. ein Line Feed ist nur das \n, dadurch wird angegeben, dass es in der nächsten Zeile weitergeht. Das \r ist ein Carriage Return, das den Cursor wieder an den Anfang der aktuellen Zeile springen lässt.

      Unter Windows wird der (komplette) Zeilenumbruch durch \r\n dargestellt, unter Unix/Linux durch ein \n und im Mac durch ein einfaches \r.

      noch mehr hoffe ich, jetzt nix falsches erzählt zu haben,

      dito.

      den RFC der das regelt habe ich nämlich gerade nicht parat ;-)

      HTTP/1.0: http://www.faqs.org/rfcs/rfc1945.html
      HTTP/1.1: http://www.faqs.org/rfcs/rfc2068.html

      bye, Frank!