Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

apache: Variablen in HTML?

28 views
Skip to first unread message

Ulli Horlacher

unread,
Dec 17, 2022, 4:41:15 AM12/17/22
to
Kann man mit apache in HTML Dateien Variablen verwenden?

Gefunden hab ich:

https://httpd.apache.org/docs/trunk/howto/ssi.html#advanced

<!--#set var="name" value="Rich" -->

Allerdings kann man auf diese Variablen dann nur in if..then Abfragen
zugreifen.

Mein Anwendungsfall dagegen ist, dass ich in href=... das Ziel
teil-substituieren will,

Beispiel, aus

<a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Herbsttour-2020/">Herbsttour</a>
<a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Tour-Juli-2022/">Tour Juli 2022</a>

soll

<a href="$DOX/Herbsttour-2020/">Herbsttour</a>
<a href="$DOX/Tour-Juli-2022/">Tour Juli 2022</a>

werden.

Mit CGI kein Problem, ich haette das aber gerne nur in HTML.



--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart E-Mail: horl...@tik.uni-stuttgart.de
Allmandring 30a Tel: ++49-711-68565868
70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Tim Ritberg

unread,
Dec 17, 2022, 4:48:56 AM12/17/22
to
Am 17.12.22 um 10:41 schrieb Ulli Horlacher:

>
> Mit CGI kein Problem, ich haette das aber gerne nur in HTML.
Dann geht wohl nur SSI.

Oder da klingelt noch Base URL bei mir:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base?retiredLocale=de

Tim

Peter J. Holzer

unread,
Dec 17, 2022, 7:12:45 AM12/17/22
to
On 2022-12-17 09:41, Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:
> Kann man mit apache in HTML Dateien Variablen verwenden?
>
> Gefunden hab ich:
>
> https://httpd.apache.org/docs/trunk/howto/ssi.html#advanced

Ist gerade 90er-Flashback-Monat? Irgendwie graben Leute momentan dauernd
Dinge aus, die damals in waren ;-).


><!--#set var="name" value="Rich" -->
>
> Allerdings kann man auf diese Variablen dann nur in if..then Abfragen
> zugreifen.

Nein. Man kann sie z.B. auch in einer echo Direktive verwenden:

<!--#echo var="name"-->


> Mein Anwendungsfall dagegen ist, dass ich in href=... das Ziel
> teil-substituieren will,
>
> Beispiel, aus
>
><a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Herbsttour-2020/">Herbsttour</a>
><a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Tour-Juli-2022/">Tour Juli 2022</a>
>
> soll
>
><a href="$DOX/Herbsttour-2020/">Herbsttour</a>
><a href="$DOX/Tour-Juli-2022/">Tour Juli 2022</a>

<a href="<!--#echo var="DOX"-->/Herbsttour-2020/">Herbsttour</a>
<a href="<!--#echo var="DOX"-->/Tour-Juli-2022/">Tour Juli 2022</a>

(Ja, da steckt offensichtlich kein HTML-Parser dahinter ...)

hp

Ulli Horlacher

unread,
Dec 17, 2022, 10:18:13 AM12/17/22
to
Peter J. Holzer <hjp-u...@hjp.at> wrote:

>> https://httpd.apache.org/docs/trunk/howto/ssi.html#advanced
>
> Ist gerade 90er-Flashback-Monat? Irgendwie graben Leute momentan dauernd
> Dinge aus, die damals in waren ;-).

Es soll sogar noch Leute geben die in C programmieren und das ist schon 50
Jahre alt :-)


>><!--#set var="name" value="Rich" -->
>>
>
> <a href="<!--#echo var="DOX"-->/Herbsttour-2020/">Herbsttour</a>
> <a href="<!--#echo var="DOX"-->/Tour-Juli-2022/">Tour Juli 2022</a>

Ohh... verschachtelte "" funktionieren?!
Ja, tatsaechlich, tut:

http://tandem-fahren.de/Mitglieder/Framstag/

Thanx!

Direkte Variablen-Substitution via $DOX waere zwar eleganter, aber dazu
brauchts halt einen anderen Webserver,

Arno Welzel

unread,
Dec 17, 2022, 2:57:36 PM12/17/22
to
Ulli Horlacher, 2022-12-17 10:41:

[...]
> Beispiel, aus
>
> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Herbsttour-2020/">Herbsttour</a>
> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Tour-Juli-2022/">Tour Juli 2022</a>
>
> soll
>
> <a href="$DOX/Herbsttour-2020/">Herbsttour</a>
> <a href="$DOX/Tour-Juli-2022/">Tour Juli 2022</a>
>
> werden.
>
> Mit CGI kein Problem, ich haette das aber gerne nur in HTML.

Ergänzend zu den anderen Posts:

Was Apache als "SSI" bezeichnet ist quasi CGI in vereinfachter Form.
Apache liest eine Datei, interpretiert den Inhalt und liefert dann das
Ergebnis aus - nichts anderes macht auch ein CGI. Und ja, man könnte
auch die Endung ".html" durch ein kleines Shell-Script CGI parsen
lassen, was dann alle Platzhalter in der Form "$DOX" durch einen Text
ersetzt.

Mir erschließt sich aber der Sinn nicht ganz.

Wenn <http://tandem-fahren.de/Mitglieder/Framstag/> manuell erzeugt
wurde, wieso dann nicht gleich die richtige URL reinschreiben? Und wenn
das die Ausgabe eines Programms ist, was die HTML-Datei erzeugt hat,
wieso schreibt es die URLs nicht gleich korrekt rein?

--
Arno Welzel
https://arnowelzel.de

Peter J. Holzer

unread,
Dec 17, 2022, 4:26:16 PM12/17/22
to
On 2022-12-17 19:57, Arno Welzel <use...@arnowelzel.de> wrote:
> Ulli Horlacher, 2022-12-17 10:41:
>> Beispiel, aus
>>
>> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Herbsttour-2020/">Herbsttour</a>
>> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Tour-Juli-2022/">Tour Juli 2022</a>
>>
>> soll
>>
>> <a href="$DOX/Herbsttour-2020/">Herbsttour</a>
>> <a href="$DOX/Tour-Juli-2022/">Tour Juli 2022</a>
>>
>> werden.
>>
>> Mit CGI kein Problem, ich haette das aber gerne nur in HTML.
>
> Ergänzend zu den anderen Posts:
>
> Was Apache als "SSI" bezeichnet ist quasi CGI in vereinfachter Form.
> Apache liest eine Datei, interpretiert den Inhalt und liefert dann das
> Ergebnis aus - nichts anderes macht auch ein CGI.

Wie Du selbst erst kürzlich hier sehr nachdrücklich argumentiert hast,
ist CGI ein Protokoll zum Aufruf externer Programme durch den Webserver:
Für jeden CGI-Aufruf wird ein eigener Prozess gestartet, der exec't das
CGI-Programm (wenn das - wie meistens - ein Script ist, startet der
Kernel den Interpreter, der dann das Script lädt), das läuft dann durch,
produziert Output und beendet sich.

SSI hingegen läuft (als Modul) innerhalb der Apache-Prozesse. Der
bereits laufende Prozess lädt das File, macht ein paar Ersetzungen und
schickt das Ergebnis an den Client. Das ist nicht viel aufwendiger als
ein einfaches HTML-File (EnableSendfile ist per default off).

Allerdings ist das ganze ziemlich eingeschränkt. Sobald es etwas
komplizierter wird, ist man wieder auf externe Prozesse angewiesen, wo
man dann bald an dem Punkt anlangt, wo CGI oder noch besser ein
Web-Framework mit einem gescheiten Templating-System weniger Aufwand
wäre.

Wenn man aber mit ein paar Text-Ersetzungen auskommt, kann SSI durchaus
"the right tool for the job" sein.

hp

Ulli Horlacher

unread,
Dec 17, 2022, 4:33:20 PM12/17/22
to
Peter J. Holzer <hjp-u...@hjp.at> wrote:

> Wenn man aber mit ein paar Text-Ersetzungen auskommt, kann SSI durchaus
> "the right tool for the job" sein.

So isses. Mehr brauch und will ich im aktuellen Fall nicht.
Ich liebe einfache Loesungen :-)

Ulli Horlacher

unread,
Dec 17, 2022, 4:35:23 PM12/17/22
to
Arno Welzel <use...@arnowelzel.de> wrote:

> Wenn <http://tandem-fahren.de/Mitglieder/Framstag/> manuell erzeugt
> wurde, wieso dann nicht gleich die richtige URL reinschreiben?

Weil die URL sich mal aendern kann und ich die dann an n Stellen aendern
muesste.
Mit Variable muss ich sie nur einmal aendern.

Tim Ritberg

unread,
Dec 18, 2022, 5:25:52 AM12/18/22
to
Am 18.12.22 um 02:49 schrieb Andreas Kohlbach:
>
> Neulich habe ich "The C Programming Language First Edition" als PDF
> gefunden und frage mich, ob ich meine (sehr schwachen/kaum vorhandenen)
> C-Kenntnisse mal auffrischen sollte. ;-)

Ja mach das, sonst kann der Seehofer bald mehr C als du ;-)
https://www.n-tv.de/politik/Horst-Seehofer-lernt-C--article23766893.html

Tim

Arno Welzel

unread,
Dec 18, 2022, 8:34:44 AM12/18/22
to
Peter J. Holzer, 2022-12-17 22:26:

> On 2022-12-17 19:57, Arno Welzel <use...@arnowelzel.de> wrote:
>> Ulli Horlacher, 2022-12-17 10:41:
>>> Beispiel, aus
>>>
>>> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Herbsttour-2020/">Herbsttour</a>
>>> <a href="https://fex.flupp.org/dox/fram...@tandem-fahren.de/public/gallery/Tour-Juli-2022/">Tour Juli 2022</a>
>>>
>>> soll
>>>
>>> <a href="$DOX/Herbsttour-2020/">Herbsttour</a>
>>> <a href="$DOX/Tour-Juli-2022/">Tour Juli 2022</a>
>>>
>>> werden.
>>>
>>> Mit CGI kein Problem, ich haette das aber gerne nur in HTML.
>>
>> Ergänzend zu den anderen Posts:
>>
>> Was Apache als "SSI" bezeichnet ist quasi CGI in vereinfachter Form.
>> Apache liest eine Datei, interpretiert den Inhalt und liefert dann das
>> Ergebnis aus - nichts anderes macht auch ein CGI.
>
> Wie Du selbst erst kürzlich hier sehr nachdrücklich argumentiert hast,
> ist CGI ein Protokoll zum Aufruf externer Programme durch den Webserver:
> Für jeden CGI-Aufruf wird ein eigener Prozess gestartet, der exec't das
> CGI-Programm (wenn das - wie meistens - ein Script ist, startet der
> Kernel den Interpreter, der dann das Script lädt), das läuft dann durch,
> produziert Output und beendet sich.

Es ging um das generelle Prinzip und den Unterschied zwischen dem, was
"HTML direkt ausliefern" und "Mit SSI behandeln" bedeutet.

[...]> Wenn man aber mit ein paar Text-Ersetzungen auskommt, kann SSI
durchaus
> "the right tool for the job" sein.

Zweifellos. Ich frage mich dennoch, wozu man das so macht und die
HTML-Dateien nicht gleich so erzeugt, wie man sie braucht.

Arno Welzel

unread,
Dec 18, 2022, 8:38:05 AM12/18/22
to
Ulli Horlacher, 2022-12-17 22:35:

> Arno Welzel <use...@arnowelzel.de> wrote:
>
>> Wenn <http://tandem-fahren.de/Mitglieder/Framstag/> manuell erzeugt
>> wurde, wieso dann nicht gleich die richtige URL reinschreiben?
>
> Weil die URL sich mal aendern kann und ich die dann an n Stellen aendern
> muesste.
> Mit Variable muss ich sie nur einmal aendern.

Wie oft hat sich die URL denn bisher schon geändert?

Tim Ritberg

unread,
Dec 18, 2022, 8:55:03 AM12/18/22
to
Am 18.12.22 um 14:38 schrieb Arno Welzel:
Und warum keine relativen Urls?

Tim

Ulli Horlacher

unread,
Dec 18, 2022, 9:06:39 AM12/18/22
to
Arno Welzel <use...@arnowelzel.de> wrote:

> Zweifellos. Ich frage mich dennoch, wozu man das so macht und die
> HTML-Dateien nicht gleich so erzeugt, wie man sie braucht.

Hatte ich geschrieben:
Ich muesste dann an n Stellen die hrefs aendern, wenn sich mal die
Basis-URL aendern sollte.
Mit Variable muss ich das nur an einer Stelle tun, die zudem
uebersichtlich oben steht.

Ulli Horlacher

unread,
Dec 18, 2022, 9:07:01 AM12/18/22
to
Oft genug.

Ulli Horlacher

unread,
Dec 18, 2022, 9:10:09 AM12/18/22
to
Verweis auf anderen Webserver.
Und selbst wenn relative URLs moeglich waeren: auch die muesste ich an n
Stellen aendern.

Warum verwendet man in Programmen ueberhaupt Konstanten?
Man koennte doch die Werte hart reinkodieren?
Aus dem selben Grund :-)

Arno Welzel

unread,
Dec 18, 2022, 1:04:29 PM12/18/22
to
Ulli Horlacher, 2022-12-18 15:10:

> Tim Ritberg <t...@server.invalid> wrote:
>> Am 18.12.22 um 14:38 schrieb Arno Welzel:
>>> Ulli Horlacher, 2022-12-17 22:35:
>>>
>>>> Arno Welzel <use...@arnowelzel.de> wrote:
>>>>
>>>>> Wenn <http://tandem-fahren.de/Mitglieder/Framstag/> manuell erzeugt
>>>>> wurde, wieso dann nicht gleich die richtige URL reinschreiben?
>>>>
>>>> Weil die URL sich mal aendern kann und ich die dann an n Stellen aendern
>>>> muesste.
>>>> Mit Variable muss ich sie nur einmal aendern.
>>>
>>> Wie oft hat sich die URL denn bisher schon geändert?
>>>
>>
>> Und warum keine relativen Urls?
>
> Verweis auf anderen Webserver.
> Und selbst wenn relative URLs moeglich waeren: auch die muesste ich an n
> Stellen aendern.
>
> Warum verwendet man in Programmen ueberhaupt Konstanten?
> Man koennte doch die Werte hart reinkodieren?
> Aus dem selben Grund :-)

Generell dazu:

URLs, die nicht dauerhaft gültig sind und sich ohne Wissen der Nutzer
ändern, sind nicht wünschenswert. Es kann sein, dass sich Leute URLs als
Bookmarks speichern und sich dann ärgern, wenn die Bookmarks nach Wochen
oder Monaten nicht mehr funktioneren, weil der Server-Betreiber aus nur
ihm bekannten Gründen etwas geändert hat.

Wenn das wirklich unvermeidbar oder aus sachlichen Gründen notwendig
ist, sollte mindestens die alte URL erreichbar bleibe und auf die neue
URL weiterleiten mit HTTP 301.

Siehe dazu auch: <https://www.w3.org/Provider/Style/URI>

Arno Welzel

unread,
Dec 18, 2022, 1:04:46 PM12/18/22
to
Ulli Horlacher, 2022-12-18 15:07:

> Arno Welzel <use...@arnowelzel.de> wrote:
>> Ulli Horlacher, 2022-12-17 22:35:
>>
>>> Arno Welzel <use...@arnowelzel.de> wrote:
>>>
>>>> Wenn <http://tandem-fahren.de/Mitglieder/Framstag/> manuell erzeugt
>>>> wurde, wieso dann nicht gleich die richtige URL reinschreiben?
>>>
>>> Weil die URL sich mal aendern kann und ich die dann an n Stellen aendern
>>> muesste.
>>> Mit Variable muss ich sie nur einmal aendern.
>>
>> Wie oft hat sich die URL denn bisher schon geändert?
>
> Oft genug.

Schlecht.

Peter J. Holzer

unread,
Dec 18, 2022, 1:54:30 PM12/18/22
to
C und C++ sind nicht die gleiche Sprache. Wer eine kann, kann nicht
unbedingt die andere.

hp

Peter J. Holzer

unread,
Dec 18, 2022, 2:07:18 PM12/18/22
to
On 2022-12-18 13:34, Arno Welzel <use...@arnowelzel.de> wrote:
> Peter J. Holzer, 2022-12-17 22:26:
>> Wie Du selbst erst kürzlich hier sehr nachdrücklich argumentiert hast,
>> ist CGI ein Protokoll zum Aufruf externer Programme durch den Webserver:
>> Für jeden CGI-Aufruf wird ein eigener Prozess gestartet, der exec't das
>> CGI-Programm (wenn das - wie meistens - ein Script ist, startet der
>> Kernel den Interpreter, der dann das Script lädt), das läuft dann durch,
>> produziert Output und beendet sich.
>
> Es ging um das generelle Prinzip und den Unterschied zwischen dem, was
> "HTML direkt ausliefern" und "Mit SSI behandeln" bedeutet.

Ich bin allerdings der Meinung, dass das was SSI macht, wesentlich näher
an "direkt ausliefern" ist als an der Ausführung eines CGI-Scripts.


> [...]> Wenn man aber mit ein paar Text-Ersetzungen auskommt, kann SSI
> durchaus
>> "the right tool for the job" sein.
>
> Zweifellos. Ich frage mich dennoch, wozu man das so macht und die
> HTML-Dateien nicht gleich so erzeugt, wie man sie braucht.

Beim angegebenen unmittelbaren Zweck (Basis-URL ändern) gebe ich Dir
recht: Das sollte eigentlich nie™ notwendig sein, und wenn doch ist das
mit sed oder Perl in einer beliebigen Anzahl von HTML-Files in wenigen
Minuten geändert. Aber man kann SSI ja auch für anderen
Boiler-Plate-Code verwenden (beliebt waren seinerzeit Header und
Footer). Und da heißt "gleich so erzeugen, wie man sie braucht", einen
Website-Generator wie Hugo zu verwenden[1]. Da geht sowas (und noch viel
mehr) recht elegant - aber die Lernkurve ist schon ziemlich steil. Die
Doku von SSI hingegen hat man vermutlich in 15 Minuten von vorn bis
hinten durch.

hp

[1] Oder ein CMS. Oder was selbstgeschriebenes (Online oder Offline).

Arno Welzel

unread,
Dec 19, 2022, 2:23:41 PM12/19/22
to
Peter J. Holzer, 2022-12-18 20:07:

> On 2022-12-18 13:34, Arno Welzel <use...@arnowelzel.de> wrote:
>> Peter J. Holzer, 2022-12-17 22:26:
>>> Wie Du selbst erst kürzlich hier sehr nachdrücklich argumentiert hast,
>>> ist CGI ein Protokoll zum Aufruf externer Programme durch den Webserver:
>>> Für jeden CGI-Aufruf wird ein eigener Prozess gestartet, der exec't das
>>> CGI-Programm (wenn das - wie meistens - ein Script ist, startet der
>>> Kernel den Interpreter, der dann das Script lädt), das läuft dann durch,
>>> produziert Output und beendet sich.
>>
>> Es ging um das generelle Prinzip und den Unterschied zwischen dem, was
>> "HTML direkt ausliefern" und "Mit SSI behandeln" bedeutet.
>
> Ich bin allerdings der Meinung, dass das was SSI macht, wesentlich näher
> an "direkt ausliefern" ist als an der Ausführung eines CGI-Scripts.

Der einzige Unterschied ist, das SSI als Modul in Apache läuft und CGI
ein externer Prozess ist. Spätestens wenn man fcgi nutzt, ist ein
separater externer Prozesse für die Anfragen aber nicht mehr nötig -
dann läuft einfach nur parallel zu Apache der ein zweitere Service, der
per fcgi die Anfragen über einen Socket durchgereicht bekommt.
0 new messages