1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
#
# redir.cgi
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $url = "http://www.....shtml?danke";
print <<endofprint;
Status: 302 Found
Location: $url
endofprint
2012-04-17T14:17:45 biancaIch würde das nicht mit Location machen. Schon allein, weil vermutlich jeder Browser leicht anders darauf reagiert.
2012-04-17T14:17:45 biancaEleganter wäre, die HTML-Seite durch das Perl script einzulesen, zu parsen (Variablen ersetzen) und an den Browser zu geben, also ein Template. Dafür gibt es auch Module im CPAN.
In deinem unteren Link ist das im Bild übrigens Schritt 3.
2012-04-17T19:39:18 DraussenduscherIch bin mir nicht sicher, aber wird das Perl-Skript, das den Status- und den Location-Header schreibt, nicht serverseitig ausgeführt? Müsste das nicht komplett unabhängig vom Browser sein?
QuoteThe Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource.
2012-04-17T10:59:02 topeg...Wenn eine Seite zu jemanden Gesendet wurde kannst keine Zweite "hinter her schicken." Der Empfänger muss sie anfordern. Das kannst du "erzwingen" indem du im HTML der Seite eine Weiterleitung im HTML-Header einfügst. Damit teilst du dem Browser mit, dass er zu einer anderen Seite gehen soll.
<meta http-equiv="refresh" content="2;url=http://deine.seite/die_datei.html">
2012-04-17T09:46:44 biancaexec und include sind m.W. dafür gedacht, in die Seite dynamischen Inhalt zu ergänzen. Der Header richtet sich nach der ursprünglichen Seite und nicht nach dem was da eingefügt wird. Daher scheitert das....
2012-04-17T19:24:15 DraussenduscherWenn ich den Skript-Aufruf in einem (ansonsten) leeren Formular mit submit unterbringe, dann kann das Skript sehr wohl die neue Seite aufrufen.
2012-04-17T19:44:58 DraussenduscherIch könnte also den print location-Teil am Ende des Mail-Skripts einbauen (welches ja aus einem Formular heraus aufgerufen wird), dann müsste es schon gehen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# setzt HTTP Header sub header{ my $self = shift; my %header = @_; %{$self->{HEADERS}} = (%{$self->{HEADERS}}, %header) if @_; my @hs = (); # Default Header Content-Type sicherstellen if(not exists $self->{HEADERS}{'Content-Type'}){ $self->{HEADERS}{'Content-Type'} = 'text/html; charset=UTF-8'; } foreach my $h(keys %{$self->{HEADERS}}){ push @hs, "$h: $self->{HEADERS}{$h}"; } return join("\n", @hs)."\n\n"; }
2012-04-17T17:57:49 rostiDer Content-Type stört überhaupt nicht, wenn ein Location-Header gesetzt wurde. Die Reihenfolge der Header ist auch egal.
Wichtig beim Location-Header ist der Status, also das sind dann 2 Header
Status: 302 Moved
Location: /
<<<<<<<<<<<<< und hier die Leerzeile >>>>>>>>>>>>>>>>>>>>>>>>>
2012-04-18T18:08:07 Draussenduscherich muss zugeben, Eure letzten Anmerkungen haben mich noch etwas verunsichert.
Ich habe gelernt, dass die print location-Methode keine Goldrandlösung ist und irgendwo eine Restunsicherheit besteht, ob das bis in alle Ewigkeit so funktionieren wird.
2012-04-19T08:00:52 pqund wir hatten immer jede menge doppelposts, weil die leute nach dem thread-erstellen ständig auf reload gedrückt haben.
2012-04-19T08:00:52 pq[...]
es gibt ne menge andere sachen, die von browser zu browser unterschiedlich sind, aber das von redirects zu behaupten ist IMHO tatsächlich FUD (oder wahlweise wichtigtuerei, sorry). und verunsichert hast du den fragesteller in der tat.
Refresh: 0; url=http://www.example.com/