cgi redirect ergibt =>Status: 302 Moved location: http://...
Konfusion
- perl
1 Beat0 Patrick Andrieu
Hallo alle,
ich konnte die Lösung zu folgendem Problem leider noch nicht finden, vielleicht kann mir da jemand weiterhelfen?
Das Perl soll nur auslesen, ob Benutzername und Passwort stimmen (gemeinsame Zugangsdaten für alle User) und dann auf eine URL weiterleiten. Man könnte zwar eine HTML-Datei mit <meta http-equiv="refresh"...> ausgeben lassen, aber das wäre doch recht unelegant, auch wegen eben dieser für eine Sekunde zwischengeschalteten Datei.
Ich habe zwei Code-Varianten, die beide dasselbe ausspucken:
Status: 302 Moved location: http://www.meinedomain.de/ordner/datei.html
Ich habe im Forums-Archiv etwas gelesen von CGI-Header, hat mich aber nicht weitergebracht.
Jetzt die beiden Code-Varianten:
----------------------------------------------------------------------------
#!/usr/local/bin/perl -w
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param url);
print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
my $cgi = new CGI;
my $url = "http://www.meinedomain.de/ordner";
my $go = "$url/datei.html";
my $err = "$url/error.html";
my $user = "super";
my $passw = "toll";
if ((param("Benutzer") eq $user) and (param("Pass") eq $passw)) {
print $cgi->redirect($go);
} else {
print $cgi->redirect($err);
}
----------------------------------------------------------------------------
#!/usr/local/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param url redirect);
print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
my $url = "http://www.meinedomain.de/ordner";
my $go = "$url/datei.html";
my $err = "$url/error.html";
my $user = "super";
my $passw = "toll";
if ((param("Benutzer") eq $user) and (param("Pass") eq $passw)) {
print redirect($go);
} else {
print redirect($err);
}
----------------------------------------------------------------------------
Vielleicht hat jemand die rettende Idee? ;-)
Danke schonmal, schönen Sonntag
Robin
Jetzt die beiden Code-Varianten:
...
print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";...
print $cgi->redirect($go);
} else {
print $cgi->redirect($err);
}
Wrong.
Du hast schon mit print rausgespuckt. der Server sendet status 200. Die Header sektion ist abgeschlossen und dein header location bleibt wirkungslos.
----------------------------------------------------------------------------
...
print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
...
print redirect($go);
} else {
print redirect($err);
}
Ebenfalls falsch aus dem eben genannten Grund.
Vielleicht hat jemand die rettende Idee? ;-)
Sende einen location header ODER sende HTML mit einem Link (ev. mit meta refresh).
mfg Beat
Wrong.
Du hast schon mit print rausgespuckt. der Server sendet status 200. Die Header sektion ist abgeschlossen und dein header location bleibt wirkungslos.
Natürlich,
ich habe ja schon geprintet.
Jetzt läufts, danke!
Grüße, Robin
Hallo Konfusion!
Ich habe im Forums-Archiv etwas gelesen von CGI-Header, hat mich aber nicht weitergebracht.
Es hat Dich sogar auf dem falsche Weg gebracht. Aus der CGI.pod:
-------------------------------------
=head2 GENERATING A REDIRECTION HEADER
print redirect('http://somewhere.else/in/movie/land');
Sometimes you don't want to produce a document yourself, but simply
redirect the browser elsewhere, perhaps choosing a URL based on the
time of day or the identity of the user.
The redirect() function redirects the browser to a different URL. If
you use redirection like this, you should not print out a header as
well.
-------------------------------------
Ansonsten tun Deine zwei Code-Varianten genau das selbe, in der ersten nutzt Du die OO-Schreibweise für die Methoden des CGI-Moduls, in der zweiten importierst Du sie.
Viele Grüße aus Frankfurt/Main,
Patrick