Wenn Nas online -> umleiten

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

rauppe31

Benutzer
Registriert
06. Juni 2011
Beiträge
2.734
Reaktionspunkte
0
Punkte
82
Hallo wiedereinmal

Ich möchte, dass meine .ch Adresse auf meiner DS 107e läuft, was ich auch geschafft habe.
Dafür benutze ich diesen Code
index.html
Rich (BBCode):
<FRAMESET ROWS="100%,*" FRAMEBORDER="0" BORDER="0" FRAMESPACING="0">
*<FRAME NAME="top" SRC="http://naefmarco.no-ip.org/naefmarco.ch" FRAMEBORDER="0" BORDER="0" >
*<FRAME NAME="bottom" SRC="leer.html" FRAMEBORDER="0" BORDER="0" >
</FRAMESET>

Ich möchte, dass mein Server (nicht die DS) vor der Umleitung überprüft, ob mein Nas online ist.
Wenn das Nas online ist, soll er den User auf das Nas umleiten.
Wenn das Nas offline ist, soll er eine Fehlermeldung anzeigen. Z.B.: Die Webseite ist zurzeit nicht verfügbar. Bitte versuchen sie es später nochmals.


Vielen Dank für eure Hilfe.
 
Hast du die Möglichkeit, php am Server auszuführen?
Wenn ja, kannst du prüfen ob du eine Antwort von deinem Gerät bekommst und dann weiterleiten.
Ansonsten blendest du deine Antwort ein und leitest nicht weiter.

Ggf. kann man dies auch schon mittels JavaScript prüfen, aber dazu kann ich gerade nichts sagen.
 
Ja, php wird unterstützt. Wie würde denn der Code dafür heissen?
 
Schau dir das Beispiel der folgenden Seite an, dass dürfte genau das was du brauchst!
http://de.php.net/fsockopen

Statt die Ausgabe im else-Bereich, machst du ein header-location wie folgt:

header('Location: http://www.example.com/');

Das dürfte es gewesen sein!
Viel Spaß ;-)
 
Hatte Lust dazu :) ...
PHP:
<?php 

$nas_url = 'http://naefmarco.no-ip.org/naefmarco.ch'; 

$response = @get_headers($nas_url); 

if (is_array($response) == true) // $response liefert ein Array, wenn vorh.
{ 
 	/* Adresse ist erreichbar --> Weiterleitung zu $nas_url */
 	header("Location: ".$nas_url."");
}
else
{
  /* Adresse nicht erreichbar --> Fehlermeldung hier über html-Block*/
  	echo <<<html_block
	<h3 style="text-align:center">Adresse $nas_url ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</h3>
	<hr size="1" width="80%">
	<p>© 2011, Mister X</p>
html_block;
}

?>

Die Adresse habe ich aus deinem ersten Post entnommen!
 
Wenn du schon die Header abfragst, solltest du auch den ersten Wert des Arrays von $response auswerten. Die Seite kann bspw. einen anderen HTTP-Code als 200 zurück liefern. M.E wird in deinem Beispiel ständig auf die Webseite der NAS geleitet ;-)
 
PHP:
header("Location: ".$nas_url."");
wieso noch einen leeren String hintendran? Noch ein Tipp: Nach header(Location) immer ein exit machen. Sonst kann die Weiterleitung scheitern, wenn noch Code folgt (ist bei dir zwar nicht der Fall, aber wenn man sich es angewöhnt erspart man sich einiges)
 
Vielen Dank für eure Hilfe. Ich werde beides mal anschauen.
 
Wenn du schon die Header abfragst, solltest du auch den ersten Wert des Arrays von $response auswerten. Die Seite kann bspw. einen anderen HTTP-Code als 200 zurück liefern. M.E wird in deinem Beispiel ständig auf die Webseite der NAS geleitet ;-)
Du hast recht. Ich hatte bei meinen Testversuchen mit Pseudo ip-Adressen gespielt und da kam als Rückgabe kein Array zurück. Allerdings wundert mich, dass beim Header-Check seiner Seite ständig ein „301 Moved Permanently“ ausgegeben wird, obwohl seine Seite erreichbar ist. Hier fällt mir ehrlich gesagt keine Lösung unter php ein.

PHP:
header("Location: ".$nas_url."");
wieso noch einen leeren String hintendran?
Zuviel des Guten :o

Hier noch mal der geänderte Code, der aber bei der Seite von rauppe31 nicht funktioniert (Stichwort 301, siehe oben), jedoch bei anderen Seiten (auch auf z.B. DynDNS-Seiten) erfolgreich klappt.
PHP:
<?php 

$nas_url = 'http://naefmarco.no-ip.org/naefmarco.ch'; 
$response = get_headers($nas_url); 
$str = $response[0];

//print_r ($str); // prüfen der Rückgabe

 if(strpos($str,"200")!==false) 
{ 
 	// Adresse ist erreichbar --> Weiterleitung zu $nas_url 
 	header("Location: ".$nas_url);
 	exit;
}
else {
  // Adresse nicht erreichbar --> Fehlermeldung hier über html-Block
  	echo <<<html_block
  	<p> </p>
	<h3 style="text-align:center">Adresse $nas_url ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</h3>
	<hr size="1" width="80%">
html_block;
}

?>
Eine vielleicht nicht ganz so elegante Lösung habe ich mit Html und Javascript dann doch noch gefunden...

Hierbei nutze ich einfach die Event-Handler onError und onLoad für den img-Tag. D.h., ich suche einfach ein Bild auf seinem NAS-Server, wird es gefunden, dann erfolgt eine Weiterleitung zur HP auf der NAS. Sollte das Bild nicht gefunden werden, könnte das ein Indiz sein, dass sein NAS-Server offline ist und gebe dann einfach unter onError einen Text aus. Für eine schönere Html-Nicht gefunden-Seite könnte man auch hier eine Weiterleitung zu eine Html-Seite auf dem anderen Server ablegen und aufrufen.
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
  <meta http-equiv="cache-control" content="no-cache">
  <title>Prüfen des NAS-Servers auf Erreichbarkeit</title>
</head>
<body>
<img src="http://naefmarco.no-ip.org/naefmarco.ch/header/cooltext516237719.png"
	 width="1px"
	 height="1px"
         alt="" 
         onLoad="document.location='http://naefmarco.no-ip.org/naefmarco.ch';"
         onError="document.write('<b><i>Adresse ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</i></b>');"
>
</body>
</html>
 
Hi Breitkrug,

testest du auch immer mit verschiedenen Browsern. Soweit ich mich erinnern kann, sind onLoad und onError nur beim IE so vorhanden ...

Itari
 
Bei mir hat es mit dem Javascript nicht funktioniert. Habe es vom Firefox getestet. Es kam immer, dass die Webseite nicht erreichbar sei, obwohl mein Nas online war.

Eigentlich möchte ich, dass wenn mein Nas offline ist, z.b. fehler.html auf dem externen Server geladen wird.
 
Tja, dann weiss ich keinen Rat mehr :eek:
Die Html-Variante habe ich selbst bei mir auf dem externen Server abgelegt und es funktioniert. Getestet habe ich das wie folgt:
  • Mac: Google Chrome, Safari
  • Windows 7: ie9, Firefox 7
  • Windows 8 (Beta): ie
  • Android Tablett PC: Dolphin-Browser

Was habe ich gemacht:
Auf der Diskstation im Ordner web ein 1*1 Pixel große Gif-Datei abgelegt, Dateiname CheckImg.gif. Auf dem externen Server (hat kein PHP) eine index.html erzeugt mit der Html onError/onLoad Geschichte. Verweis auf die Bilddatei CheckImg.gif. Zusätzlich habe ich noch eine offline.html erstellt, die auch auf dem externen Server liegt. Diese wird im onError-Handler aufgerufen.
Der Test erfolgte einmal durch Dateinamensänderung der CheckImg.gif und durch ein abschalten der Diskstation selbst. Beides klappte.

Die Eventhandler onErrror und onLoad sollten bei jedem gängigen Browser funktionieren. Etwas gegenteiliges, dass es nur im ie funktioniert konnte ich nicht feststellen und selbst in meiner JS-Bibel ("Das JavaScript Codebook" vom Addison-Wesley Verlag) erklärt die Eventhandler ohne Hinweis darauf, dass es nur in bestimmten Browsern funktionieren soll.

Ach ja, da bestimmt die Frage aufkommt wegen abgeschaltetem JS:
Im Html-Code habe ich nach dem img-Tag ein noscript-Tag eingebaut. Mir ist klar, dass dann bei abgeschalteter Diskstation meine offline.html nicht ausgeführt werden kann...ok, ist dann halt so!
HTML:
<noscript>Sie haben JavasSript deaktiviert. Bitte klicken Sie auf den untenstehenden Link um eine manuelle Weiterleitung zu initiieren.<br>
  <a href="http://domain.tld">Fotogalerie</a>
</noscript>
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat