www.mikrocontroller.net

Forum: PC-Programmierung Apache: statische HTML-Seiten modifizieren


Autor: Jürgen W. (lovos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich programmiere Webseiten, die von einem embedded System gehostet 
werden. Dort laeuft ein embedded Webserver.
Da diese Entwicklung langsam geht, will ich zu Entwicklungszwecken den 
embedded Webserver mit Apache simulieren.
Das funktioniert, nur an ein paar JS-Stellen muss der Code geaendert 
werden.
Dort habe ich
window.location.host.indexOf("localhost")==-1
Abfragen.
Mir waere es lieber, ich koennte diese Stellen unveraendert lassen und 
von apache mittels eines selbstgeschriebenen Skriptes (sed) modifizieren 
lassen.

Weiss jemand, ob man das machen kann? Dass apache statische Webseiten 
modifiziert, bevor sie zum Browser geschickt werden?

Gruss, Lovos

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen G. schrieb:
> Dort habe ich
>
window.location.host.indexOf("localhost")==-1
> Abfragen.
> Mir waere es lieber, ich koennte diese Stellen unveraendert lassen

Vorschläge:

1) Alles was sich zwischen Entwicklungs- und Produktionsumgebung 
unterscheidet kommt in eine eigene Datei. Von der Datei gibts dann zwei 
Versionen - eine fürs Entwickeln, die andere für die Produktion.

2) Vielleicht reicht ja eine Parametrisierung? if 
(window.location.host.indexOf(config.hostName) == -1) { ... }

3) Oder eine Abstraktion?
if (perform_some_test()) { ... }

4) Preprozessor (cpp)/Makroprozessor (m4)/Search-Replace-Tool (sed) über 
die Seiten laufen lassen, bevor sie in der Entwicklungs- oder 
Produktionsumgebung aufgespielt werden.

Stephan

Autor: Lovos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
(bin gerade nicht eingeloggt)
Danke fuer die Vorschlaege, aber ich will den Code unveraendert lassen, 
da ich in einem Team mit CVS arbeite und viele Dateien der Kollegen 
antasten muss.
Deshalb versuche ich eine Loesung, wo der Code on the fly fuer Apache 
angepasst wird.

Juergen G.

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lovos schrieb:
> Danke fuer die Vorschlaege, aber ich will den Code unveraendert lassen,
> da ich in einem Team mit CVS arbeite und viele Dateien der Kollegen
> antasten muss.
> Deshalb versuche ich eine Loesung, wo der Code on the fly fuer Apache
> angepasst wird.

Vorschlag: Skript schreiben, dass die Seiten modifiziert und sie so 
ablegt, das Apache sie ausliefert. Das wäre quasi Variante 4.

Warum reicht das nicht, d.h. warum muss es on-the-fly sein?

Autor: Lovos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stephan,
dieses Skript habe ich schon geschrieben:
Sed-Befehle erweitern den Code, dass er sowohl mit Apache als auch mit 
embedded Webserver funktioniert. (siehe oben)
Solange ich an den Dateien nichts aendern muss ist es ja gut.
Muss ich was aendern und einchecken, dann sind die SED-Aenderungen auch 
in CVS, und das sollen sie nicht.
D.h. ich muss die Apache-Version-Ergaenzung wieder rueckgaengig machen 
(original File drueberkopieren), Aenderungen machen, einchecken, und 
dann wieder sed-Skript ausfuehren. Das ist zu umstaendlich.
Deshalb waere mir eine on-the-fly Loesung lieber.
Aber offensichtlich bietet Apache das nicht. Habe ja auch lange 
erfologlos gegoogelt.

Autor: Jan Dressler (keyman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
nur mal so als völllig unausgegorene Idee:

Lass die Seite vor dem Laden im Apache durch ein dort liegendes 
liegendes php-Script laufen.
Das soll die Änderungen vornehmen (statisch mit Speichern oder nicht ist 
egal) und dann siehst du es von dort aus.
Wenn du dann deine embedded-Version bearbeitest und das php wieder 
öffnest kommt wieder die Konvertierung uswusw. Du öffnest quasi immer 
nur as php-Script.

Hab jetzt nicht länger drüber nachgedacht, glaube aber, dass das möglich 
sein sollte.
jan

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lovos schrieb:
> Hallo Stephan,
> dieses Skript habe ich schon geschrieben:
> Sed-Befehle erweitern den Code, dass er sowohl mit Apache als auch mit
> embedded Webserver funktioniert. (siehe oben)
> Solange ich an den Dateien nichts aendern muss ist es ja gut.
> Muss ich was aendern und einchecken, dann sind die SED-Aenderungen auch
> in CVS, und das sollen sie nicht.

Nee, so hab ich das nicht gemeint. Mein Vorschlag war so zu verstehen:

Du machst cvs co in ein Arbeitsverzeichis - nennen wir es mal $WORKDIR. 
Dann gibts ja noch das Verzeichnis, aus dem Apache die Dateien liefert: 
$WWWDIR. Nun hast Du ein Skript, dass Dir die Seiten anpasst und dabei 
von $WORKDIR nach $WWWDIR kopiert.

Dein Workflow ist also folgender:

1. cd $WORKDIR && cvs co ...
2. Seiten ändern
3. Mittels Skript Seiten automatisch anpassen und von $WORKDIR nach 
$WWWDIR kopieren lassen
4. Testen mit Apache
5. Wiederhole ab 2.

> D.h. ich muss die Apache-Version-Ergaenzung wieder rueckgaengig machen
> (original File drueberkopieren), Aenderungen machen, einchecken, und
> dann wieder sed-Skript ausfuehren. Das ist zu umstaendlich.

Ja, ist es, deswegen trennt man das Ganze halt in ein Arbeitsverzeichnis 
$WORKDIR und das $WWWDIR, wobei $WORKDIR != $WWWDIR.

> Deshalb waere mir eine on-the-fly Loesung lieber.
> Aber offensichtlich bietet Apache das nicht. Habe ja auch lange
> erfologlos gegoogelt.

Ich hab noch eine Idee: Skript (z.B. CGI) + mod_rewrite. mod_rewrite 
wird dann so eingerichtet, dass Abfragen auf

http:// testhost/my/web/page.html

umgeschrieben werden auf

http:// 
testhost/cgi-bin/myFancySedScriptWrappedIn.cgi?target=my/web/page.html

Dann gehts auch on-the-fly.

Stephan

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan M. schrieb:
> Dein Workflow ist also folgender:
>
> 1. cd $WORKDIR && cvs co ...
> 2. Seiten ändern

...damit meinte ich, dass Du hier diejenigen Anpassungen an den Seiten 
vornehmen kannst, die später ins CVS zurück sollen...

> 3. Mittels Skript Seiten automatisch anpassen und von $WORKDIR nach
> $WWWDIR kopieren lassen
> 4. Testen mit Apache
> 5. Wiederhole ab 2.

Autor: Lovos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hab noch eine Idee: Skript (z.B. CGI) + mod_rewrite. mod_rewrite
>wird dann so eingerichtet, dass Abfragen auf

Danke. Die Idee war super. Damit habe ich das urspruengliche Problem 
anders geloest, damit ich gar keine unterschiedlichen HTML Dateien mehr 
brauche. Das On-the-fly Thema hat sich damit erledigt :-)

Autor: Lovos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das einzige unschoene an der Sache ist, dass die .htaccess datei (fuer 
die rewrite-Rules) im Verzeichniss der HTML-Dateien steht.
Dadurch, dass dort auch die CVS-Dateien stehen, die ebenso nicht auf den 
Embedded-Server hochgeladen werden sollen, ist das nicht ganz so 
schlimm.
Aber vielleicht gibt es eine Moeglichkeit, die Rewrite-Rules woanders 
abzulegen?
Gruss

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lovos schrieb:
> Aber vielleicht gibt es eine Moeglichkeit, die Rewrite-Rules woanders
> abzulegen?

Ja, in den globalen Konfigurationsdateien von Apache. Wo genau was hin 
muss ist Abhängig von Deiner Distribution bzw. Apache-Installation.

Stephan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.