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


von Jürgen W. (lovos)


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
1
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

von Stephan M. (stephanm)


Lesenswert?

Jürgen G. schrieb:
> Dort habe ich
>
1
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

von Lovos (Gast)


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.

von Stephan M. (stephanm)


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?

von Lovos (Gast)


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.

von Jan D. (keyman)


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

von Stephan M. (stephanm)


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

von Stephan M. (stephanm)


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.

von Lovos (Gast)


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 :-)

von Lovos (Gast)


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

von Stephan M. (stephanm)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.