OLSR HTTPInfo Redirect: Unterschied zwischen den Versionen

Aus FunkFeuer Wiki
Wechseln zu: Navigation, Suche
K (HTML Redirect)
K (Tippfehler)
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
zum weiterleiten von cgi-bin-status.html aufs HttpInfo bieten sich folgende möglichkeiten
+
Zum Weiterleiten von cgi-bin-status.html aufs HttpInfo bieten sich folgende Möglichkeiten:
  
cgi-bin-status.html sollte die Datei heissen weil die links von den Statusseiten der freifunkfirmware router eben darauf zeigen,..
+
cgi-bin-status.html sollte die Datei heißen, weil die Links von den Statusseiten der Freifunk-Firmware-Router eben darauf zeigen,..
  
statt 78.41.113.333 sollte natürlich die IP des routers verwendet werden,..
+
Die Datei muss jedenfalls nachher ausführbar gemacht werden!
 
+
  chmod +x /www/cgi-bin-status.html
und die datei muss nachher ausführbar gemacht werden!
+
  chmod 755 /www/cgi-bin-status.html
+
 
====Redirect mit HTTP Header====
 
====Redirect mit HTTP Header====
entweder als HTTP-Header
+
Entweder als HTTP-Header
 +
(falls ein anderer Port als 8000 fürs HttpInfo verwendet wurde: PORT korrigieren!)
  
 
  #!/bin/sh
 
  #!/bin/sh
OWN_IP=78.41.113.333
 
 
  PORT=8000
 
  PORT=8000
 +
OWN_IP=`nvram get wifi_ipaddr`
 
  echo "HTTP/1.0 301 Moved Permanently"
 
  echo "HTTP/1.0 301 Moved Permanently"
 
  echo "Location: http://$OWN_IP:$PORT/nodes"
 
  echo "Location: http://$OWN_IP:$PORT/nodes"
Zeile 19: Zeile 18:
 
  echo
 
  echo
  
 +
Unter der fff funktioniert obiges.
  
unter der fff geht obiges
+
Unter kamikaze wird das Shellscript aber gleich gar nicht ausgeführt, sondern als Content 1:1 ausgegeben )-;
 +
 
 +
dafür gibt es aber auch einen Workaround, denn der busybox httpd ruft immer /cgi-bin/index.cgi auf wenn er in einem Verzeichnis kein index.html findet,.
 +
 
 +
legt man nun anstatt einer Datei cgi-bin-status.html ein Verzeichnis mit diesem Namen an, wird dieses aufgerufen und man kann entweder einen sauberen http-header redirect machen, oder gleich das richtige cgi-script aufrufen,.. allerdings ist es auf diese Weise nicht möglich Formulardaten/parameter zu empfangen, deswegen ist es für Webseiten mit Formularen/Parametern besser nur einen redirect zu machen,.. (und in unserem Fall fürs httpinfo (auf einem anderen Port) eh die einzige (sinnvolle) Möglichkeit)
 +
 
 +
Hier ein Beispiel eines index.cgi, welches nen redirect aufs httpinfo macht, und für andere Verzeichnis-urls nach einem cgi script (mit Namen cgi) in diesem Verzeichnis sucht und es aufruft, oder ansonsten ne Fehlermeldung zurückliefert,..
 +
 
 +
#!/bin/sh
 +
if [ "$QUERY_STRING" == "/cgi-bin-status.html/" ]; then
 +
  PORT=8000
 +
  OWN_IP=`uci get network.wan.ipaddr`
 +
  echo "HTTP/1.0 301 Moved Permanently"
 +
  echo "Location: http://$OWN_IP:$PORT/nodes"
 +
  echo "Connection: close"
 +
elif [ -f ..$QUERY_STRING./cgi ]; then
 +
..$QUERY_STRING./cgi
 +
else
 +
  echo -en "Content-type: text/html\r\n\r\n"
 +
  echo "no index available for this Directory $QUERY_STRING !"
 +
fi
  
unter kamikaze wird das shellscript aber gleich gar nicht ausgeführt sondern als content 1:1 ausgegeben )-;
+
Danach auch das index.cgi (und eventuell auch die individuellen cgi) ausführbar machen.
  
also mit Kamikaze stattdessen untrigen HTML Redirect verwenden, oder elegantere Lösung finden (und hier dazutun *g)
+
Gefällt einem obiges wirklich nicht, dann kann mann auch unten angeführten HTML Redirect verwenden, obwohl es nicht empfehlenswert ist, da man einerseits diese Datei immer an die richtige IP des Routers anpassen muss,.. und ein HTML Redirect eben auch langsamer ist, und ihn eventuell einige exotische Clients gar nicht mitmachen,..
  
 
====HTML Redirect====
 
====HTML Redirect====
redirect im htmlfile selber (Achtung an 3 Stellen muss IP:PORT korrigiert werden!)
+
Redirect im Html-File selber (Achtung: An drei Stellen muss IP:PORT korrigiert werden!)
  <!--eigentlich sollt man nen redirect HTTP-header schicken, aber ...-->
+
  <!--eigentlich sollt man den Redirect HTTP-Header schicken, aber ...-->
 
  <HTML>
 
  <HTML>
 
  <HEAD>
 
  <HEAD>

Aktuelle Version vom 3. Juni 2009, 20:51 Uhr

Zum Weiterleiten von cgi-bin-status.html aufs HttpInfo bieten sich folgende Möglichkeiten:

cgi-bin-status.html sollte die Datei heißen, weil die Links von den Statusseiten der Freifunk-Firmware-Router eben darauf zeigen,..

Die Datei muss jedenfalls nachher ausführbar gemacht werden!

chmod +x /www/cgi-bin-status.html

Redirect mit HTTP Header

Entweder als HTTP-Header (falls ein anderer Port als 8000 fürs HttpInfo verwendet wurde: PORT korrigieren!)

#!/bin/sh
PORT=8000
OWN_IP=`nvram get wifi_ipaddr`
echo "HTTP/1.0 301 Moved Permanently"
echo "Location: http://$OWN_IP:$PORT/nodes"
echo "Connection: close"
echo
echo

Unter der fff funktioniert obiges.

Unter kamikaze wird das Shellscript aber gleich gar nicht ausgeführt, sondern als Content 1:1 ausgegeben )-;

dafür gibt es aber auch einen Workaround, denn der busybox httpd ruft immer /cgi-bin/index.cgi auf wenn er in einem Verzeichnis kein index.html findet,.

legt man nun anstatt einer Datei cgi-bin-status.html ein Verzeichnis mit diesem Namen an, wird dieses aufgerufen und man kann entweder einen sauberen http-header redirect machen, oder gleich das richtige cgi-script aufrufen,.. allerdings ist es auf diese Weise nicht möglich Formulardaten/parameter zu empfangen, deswegen ist es für Webseiten mit Formularen/Parametern besser nur einen redirect zu machen,.. (und in unserem Fall fürs httpinfo (auf einem anderen Port) eh die einzige (sinnvolle) Möglichkeit)

Hier ein Beispiel eines index.cgi, welches nen redirect aufs httpinfo macht, und für andere Verzeichnis-urls nach einem cgi script (mit Namen cgi) in diesem Verzeichnis sucht und es aufruft, oder ansonsten ne Fehlermeldung zurückliefert,..

#!/bin/sh
if [ "$QUERY_STRING" == "/cgi-bin-status.html/" ]; then
 PORT=8000
 OWN_IP=`uci get network.wan.ipaddr`
 echo "HTTP/1.0 301 Moved Permanently"
 echo "Location: http://$OWN_IP:$PORT/nodes"
 echo "Connection: close"
elif [ -f ..$QUERY_STRING./cgi ]; then
..$QUERY_STRING./cgi
else
 echo -en "Content-type: text/html\r\n\r\n"
 echo "no index available for this Directory $QUERY_STRING !"
fi

Danach auch das index.cgi (und eventuell auch die individuellen cgi) ausführbar machen.

Gefällt einem obiges wirklich nicht, dann kann mann auch unten angeführten HTML Redirect verwenden, obwohl es nicht empfehlenswert ist, da man einerseits diese Datei immer an die richtige IP des Routers anpassen muss,.. und ein HTML Redirect eben auch langsamer ist, und ihn eventuell einige exotische Clients gar nicht mitmachen,..

HTML Redirect

Redirect im Html-File selber (Achtung: An drei Stellen muss IP:PORT korrigiert werden!)

<HTML>
<HEAD>
<TITLE>
OLSR Status Weiterleitung
</TITLE>
<meta HTTP-EQUIV="REFRESH" content="0; url=http://78.41.113.333:8000/nodes">
<SCRIPT>
document.location="http://78.41.113.333:8000/nodes";
</SCRIPT>
</HEAD>
<BODY>
<a href="http://78.41.113.333:8000/nodes">Hier gehts zum, HTTP-Info</a>
</BODY>
</HTML>