Seite 1 von 1

Redirect mit PHP

Verfasst: Mi 24.Jan, 2007 22:38
von SilentStorm
Hi ich hab folgendes Problem: Ich möchte eine Seite anzeigen und dann nach sagen wir mal 5 sec automatisch auf eine andere weiterleiten. Halt so (ähnlich) wie es beim Orion ist wenn man nen Posting geschrieben hat dann bekommt man ja erst die Posting erfolgreich eingetragen Seite zu Gesicht mit den beiden Links zurück zu forum und zurück zum Thema. Macht man garnix läd nach ein paar Sekunden automatisch das Thema. Sowas möcht ich auch haben nur halt ausserhalb des Orion. Hab auch schon in der posting.php nachgeschaut aber nicht wirklich was gefunden. Da wird zwar nen redirect definiert und danach auch irgendwann ne redirect funktion aufgerufen aber die hab ich ned gefunden.

Ich möchte keinen Java Redirect ala location.replace und auch kein .htaaccess sondern nen wirklichen PHP redirect (sofern es sowas gibt)

EDIT: header("Location: Ziel"); funktioniert nicht da bereits ausgaben in der Datei die weiterleiten soll gemacht werden und der dann nen Fehler schmeisst :(

vielen dank im vorraus.

Verfasst: Mi 24.Jan, 2007 22:56
von oxpus
Öhm, das Forum leitet von diesen "Zwichenseiten" per META-Link weiter, also reinem HTML-Befehl, oder man setzt eine Pause und sendet dann eine Weiterleitung per header();.

Zum ersteren:
Sende an das Template diesen Code:

Code: Alles auswählen

'<meta http-equiv="refresh" content="5;url=...">'
Das muss dann eben eingesetzt werden, bevor eine Seite geparst werden, also im Header des HTML-Teils im Template, damit die Weiterleitung nach 5 Sekunden an die hinter url= angegebene Adresse funktioniert.
Ohne Templatesystem ist das allerdings schon schwerer umzusetzen, ausser man würde in der Seite, von der aus weitergeleitet werden soll, den META-Link direkt im Header einbauen.

Variante 2 könnte aber auch die bessere Methode sein:

Code: Alles auswählen

sleep(5); // Wartet 5 Sekunden

$url = '...'; // Die Adresse, an die weitergeleitet werden soll

if (@preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')))
%u7b
	header('Refresh%u3a 0; URL=' . $url);
	echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="refresh" content="0; url=' . $server_protocol . $server_name . $server_port . $script_name . $url . '"><title>Redirect</title></head><body><div align="center">If your browser does not support meta redirection please click <a href="' . $server_protocol . $server_name . $server_port . $script_name . $url . '">HERE</a> to be redirected</div></body></html>';
	exit;
%u7d

// Behave as per HTTP/1.1 spec for others
header('Location%u3a ' . $url);
exit;
Das Script wartet 5 Sekunden und schickt dann per Header den Befehl zum Weiterleiten an den Client (Browser des Users).
Nachteil:
Während der "Wartezeit" reagiert das Script nicht unbedingt auf Userangaben!

Es gibt eben mit PHP selber keinen "echten" Redirect-Befehl. Auch das phpBB greift hier auf HTML-Befehle zurück, bzw. sendet Codes per header(); welche an den Browser des Users gesendet und dort ausgeführt werden...

-- Oh, da hat jemand schneller editiert, wie ich "korrekt" antworten konnte... Teil 2 ist damit komplett hinfällig, ich lasse es aber der Vollständigkeit mal drinnen...

Verfasst: Fr 02.Feb, 2007 12:22
von Indextrader
Hallo ihr Lieben

Kann ich auch mehrere einzelne Files in einer PHP weiterleiten, so wie beim .htaccess

Beispiel .htaccess

Redirect permanent /file1.wmv http://www.domain.de/file1.html
Redirect permanent /file2.wmv http://www.domain.de/file2.htm
Redirect permanent /file3.wmv http://www.domain.de/file3.html

Hintergrund:

Wir möchten ein Video Album online stellen, in dem die Videos nicht auf unserem Server geladen werden, sondern auf MyVideo, YouTube oder sonstwo, da Videos ja sehr trafficintensiv sind.

Das Script liegt auf einem Windows Server.
Bei anklicken des Thumbs wird auf watch.php umgeleitet, anhand der Video ID dann das zu dem Thumb gehörende Video im Video Player angezeigt.

Sicher könnte man auch die watch.php entsprechend modifiziern, aber da fehlt mir der Plan.
Ich dachte mir, das man in der DB das jeweilige Video anstatt mit dem .wmv File einfach mit einer .html Datei verlinkt, in der ich dann den entsprechenden Code packe, aber dazu wird wohl auch die watch.php erst einmal angepasst werden müssen, denn momentan passiert dann gar nichts.

Vielleicht weiss ja jemand Rat?

Verfasst: Fr 02.Feb, 2007 14:57
von oxpus
Mit PHP geht das nur, wenn Du irgendwie einer aufzurufenden Datei mitteilst, wohin er weiterleiten soll.
Man könnte also z. B. einem Link einen Parameter mitgeben, der dann von PHP ausgelesen und in der Weiterleitungsart berücksichtigt werden kann.

Aber warum nicht per .htaccess weiterleiten?
Windows Server können doch auch mit Apache umgehen, oder sprechen wir hier von mehr als nur ein "paar" Dateien?

Verfasst: Fr 02.Feb, 2007 16:22
von Indextrader
[quote="oxpus";p="69435"]Mit PHP geht das nur, wenn Du irgendwie einer aufzurufenden Datei mitteilst, wohin er weiterleiten soll.
Man könnte also z. B. einem Link einen Parameter mitgeben, der dann von PHP ausgelesen und in der Weiterleitungsart berücksichtigt werden kann.

Aber warum nicht per .htaccess weiterleiten?
Windows Server können doch auch mit Apache umgehen, oder sprechen wir hier von mehr als nur ein "paar" Dateien?[/quote]

Per .htaccess habe ich es schon versucht, es wären zwar im Endresultat etwa 150 Videos, aber selbst bei einem klappt es per .htaccess irgendwie nicht

Ich habe folgendes in der .htaccess
Redirect permanent /2Fish_Bunaken_Diving.wmv http://localhost/video/video_clips/delfine.html

Diese .htaccess habe ich sowohl in den Ordner gelegt wo die index.php ist, also auch wo die watch.php liegt, aber das Script greift immer direkt auf das Video zu, als würde die .htaccess gar nicht existieren.

Wenn das mit .htaccess ginge wäre das schon klasse, zur Not leite ich halt einige Videos weiter und andere hoste ich selber, besser als nichts :p

Neben dem lokalen Server habe ich es auch auf dem dedicated Server versucht.
Vielleicht habe ich ja nur irgendeine Kleinigkeit übersehen......*grübel**

Verfasst: Fr 02.Feb, 2007 16:52
von oxpus
Es kommt darauf an, welche .htaccess der Apache mit welchen Befehlen wo erwartet.
Im Normalfall immer im Webroot legen, also im obersten Ordner des Webservers...

Verfasst: Fr 02.Feb, 2007 18:00
von Indextrader
Ok lege ich das .htaccess in die oberste Ebene kann ich das .wmv umleiten.

Redirect permanent /video/videos/2Fish_Bunaken_Diving.wmv http://66.197.217.248:81/video/video_clips/delfine.html

allerdings wird das nicht direkt vom Script angesprochen sondern über diesen Link
http://66.197.217.248:81/video/videos/w ... ch=v&id=32

Versuche ich diesen umzuleiten passiert nichts, nachfolgendes hat keinerlei Wirkung :(

Redirect permanent /video/videos/watch.php?ch=v&id=32 http://66.197.217.248:81/video/video_clips/delfine.html

und packe ich dieses in die .htaccess
Redirect permanent http://66.197.217.248:81/video/videos/w ... ch=v&id=32 http://66.197.217.248:81/video/video_clips/delfine.html

Redirect permanent /video/videos/2Fish_Bunaken_Diving.wmv http://66.197.217.248:81/video/video_clips/delfine.html

dann gibt es einen 500er Error und nichts geht mehr ¦4

Schwer verwirrend

Verfasst: Fr 02.Feb, 2007 21:55
von oxpus
Hm redirect beherrscht nur das Weiterleiten von Verzeichnissen.
Da hätte ich auch mal früher dran denken sollen.
Für Dein Vorhaben wären Rewrite Rules passender.
Also sowas wie:

Code: Alles auswählen

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://66.197.217.248:81/video/videos/watch.php?ch=v&id=32?$ [OR] 
RewriteCond %{HTTP_REFERER} !^http://66.197.217.248:81/video/video_clips/2Fish_Bunaken_Diving.wmv?$ [NC] 
RewriteRule ^(.*) http://66.197.217.248:81/video/video_clips/delfine.html$1 [L,R=301]
Zumindest soweit ich das jetzt meine, daß dieses korrekt wäre...

Verfasst: Sa 03.Feb, 2007 08:02
von Indextrader
super .... hört sich gut an, allerdings muss da irgendwo noch ein Fehler sein, denn wenn ich die .htaccess in den Root lade gibt es einen Serverfehler

Folgendes sagt das Error Log

Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration

Verfasst: Sa 03.Feb, 2007 10:01
von oxpus
Dann ist das Modul mod_rewrite nicht im Apache eingebunden.
Nur dann funktioniert auch dieses...

Verfasst: Sa 03.Feb, 2007 10:39
von Indextrader
Bei dir lern man immer jede Menge :)

habe den Eintrag in der .htaccess wie von dir beschrieben vorgenommen, Modul ist aktiv, allerdings schein durch deinen Code die Umleitung endlos zu werden.

Die Url auf die umgeleitet wird sieht nun wie folgt aus :p

http://66.197.217.248:81/video/video_cl ... elfine.htm

Verfasst: Sa 03.Feb, 2007 11:55
von oxpus
Hm, dann müsste mal jemand "Erfahrener" hier ran, ich leite zu selten um, um hier den Fehler zu finden :( Sorry...

Verfasst: Sa 03.Feb, 2007 18:04
von Indextrader
Mist ich habe nun den ganzen Tag gegoogled, sollte eigentlich völlig einfach sein, aber irgendwo klemmt es noch.

Verfasst: So 04.Feb, 2007 13:07
von oxpus
Vielleicht klappt es so besser:

Code: Alles auswählen

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://66.197.217.248:81/video/videos/watch.php?ch=v&id=32?$ [OR]
RewriteRule ^(.*) http://66.197.217.248:81/video/video_clips/delfine.html$1 [L,R=301]

RewriteCond %{HTTP_REFERER} !^http://66.197.217.248:81/video/video_clips/2Fish_Bunaken_Diving.wmv?$ [NC]
RewriteRule ^(.*) http://66.197.217.248:81/video/video_clips/delfine.html$1 [L,R=301]

Verfasst: So 04.Feb, 2007 15:02
von Indextrader
Lieb von dir, das du dir so viel Mühe gibst.
Ich bastel nun auf der lokalen Maschine weiter.

Ich habe aus deinem Code die Leerzeichen hinter {HTTP_REFERER} + (.*) rausgenommen, mit Leerzeichen war die Seite nicht mehr erreichbar, egal was ich aufgerufen habe. Ohne Leerzeichen läuft wieder alles einwandfrei, aber es findet kein Redirect statt.

Code: Alles auswählen

RewriteEngine On 
RewriteCond %{HTTP_REFERER}!^http://localhost/video/videos/watch.php?ch=v&id=32?$ [OR] 
RewriteRule ^(.*)http://localhost/video/video_clips/delfine.html$1 [L,R=301] 
RewriteCond %{HTTP_REFERER}!^http://localhost/video/video_clips/2Fish_Bunaken_Diving.wmv?$ [NC] 
RewriteRule ^(.*)http://localhost/video/video_clips/delfine.html$1 [L,R=301]
Ordner oder einzelne php Files z.B video/index.php kann ich mit dem RewriteMod völlig easy weiterleiten, sobald ich aber den kompletten Pfad davor setze z.B http://localhost/video/index.php geht es nicht mehr

Verfasst: So 04.Feb, 2007 15:46
von oxpus
Hier mal eine andere Variante:

Code: Alles auswählen

RewriteEngine On 
RewriteRule ^watch.php?ch=v&id=([0-9]*)\.html$ localhost/video/video_clips/delfine.html [L] 
RewriteRule ^2Fish_Bunaken_Diving.wmv\.html$ localhost/video/video_clips/delfine.html [L] 

Verfasst: So 04.Feb, 2007 16:14
von Indextrader
Du bist ja bald so unermüdlich wie ich :p

Absolut keine Weiterleitung, es passiert nichts.
Da watch.php im Ordner /video/videos/ liegt habe ich alternativ auch

Code: Alles auswählen

RewriteRule ^/video/videos/watch.php?ch=v&id=([0-9]*)\.html$ localhost/video/video_clips/delfine.html [L] 
und

Code: Alles auswählen

RewriteRule ^/video/videos/watch.php?ch=v&id=32$ localhost/video/video_clips/delfine.html [L] 
versucht, geht aber auch nicht.
Das treibt mich seit 2 Tagen zum Wahnsinn :D

Verfasst: So 04.Feb, 2007 16:28
von oxpus
Also für mich wäre jetzt Übungsende. Sorry, ich habe dazu keine weitere Idee mehr...

Verfasst: So 04.Feb, 2007 17:11
von Indextrader
Ist verständlich, danke dir für die Mühen

Verfasst: Mo 05.Feb, 2007 19:03
von Indextrader
Hallo

Ich habe es, so muss der Redirect aussehen, dann klappt es

RewriteEngine On
RewriteCond %{QUERY_STRING} ^ch=v&id=32
RewriteRule ^watch.php$ http://66.197.217.248:81/video/video_cl ... diving.htm [R]

Das Ergebnis kann sich sehen lassen, nun können wir anfangen mittlerweile 200 vorhandene Videos einzustellen :D

Video Gallery

Danke nochmal für deine unermüdliche Mühe

Verfasst: Mo 05.Feb, 2007 21:42
von oxpus
Ja, wer sagts denn.
Mit Geduld geht alles.

Freut mich, wenn ich zumindest die Gedanken angeregt habe...

Verfasst: Di 06.Feb, 2007 06:18
von Indextrader
Geduld muss man mal erst haben ;)
Aber ohne dich wäre ich mal wieder aufgeschmissen gewesen

Verfasst: Di 06.Feb, 2007 08:22
von oxpus
Danke danke, auch wenn ich "nur" den Anstoss liefern konnte.