Das fedsSite
-Apache-Macro wird vom Apache-Control-Modul im IES-Webnode bereit gestellt und ist dort unter den Pfad IES_WEBNODE_HOME/data/ies-webnode/data/apache2/macros/fedsSite.conf
erreichbar. In der Regeln wird das Verzeichnis IES_WEBNODE_HOME/data/ies-webnode/data/apache2/
in dem Apache-Konfigurationsverzeichnis verlinkt und ist dann unter einem Pfad wie /etc/apache/ies.conf.d/
erreichbar. Um die IES-Spezifischen Macros und VHost-Konfigurationen zu laden wird die Hauptkonfiguration des Apache (z.B. /etc/apache2/apache2.conf
) durch folgende Konfiguration ergänzt.
# --managed-by-ies-webnode-updater
<IfModule macro_module>
IncludeOptional ies.conf.d/macros/*.conf
IncludeOptional ies.conf.d/sites/*.conf
</IfModule>
# --/managed-by-ies-webnode-updater
Damit wird das Macro dem Apache bekannt gemacht.
Das Macro fedsSite
wird verwendet, um FEDS
basierte Webseiten zu konfigurieren. Dafür sind auf dem Webserver folgende Komponenten bereit zu stellen.
- Ein Frontend-Projekt, das korrespondierend zu dem serverseitigen die frontendseitige Logik für die Webseite bereit stellt.
- Ein FEDS-Projekt, das korrespondierend zu dem Frontend die serverseitige Logik für die Webseite bereit stellt.
- Die publizierten Resourcen, die das CMS bereit gestellt hat. Dies sind die Inhalte der Redakteure und Administratoren, die für bestimmte Publikationsbereiche freigegeben sind.
Diese Komponenten werden über das fedsSite
-Macro zusammegeführt. Dies erfolgt immer pro virtuellem Host.
Die Virtual-Host Konfigurationen werden unter /etc/apache/ies.conf.d/sites
abgelegt und müssen mit .conf
enden. Ein Beispiel hierfür ist:
/etc/apache/ies.conf.d/sites/www.domain.de.conf
# fedsSite $configName $baseDir $serverName $sitekitToken
Use fedsSite www.domain.de "/var/www/domain.de/www" www.domain.de Djfjhgr4jfdu
Der $configName
ist relevant für Kundenspezifische Includes. In diesem Fall sind folgenden Konfigurationen möglich:
includes/www.domain.de.common.conf
Wird vor allen anderen Konfigurationen eingelesen
includes/www.domain.de.extra.conf
Wird anch deen recommendation
-, includes/ssl.conf
- und den allgemeinen includes/extra.conf
eingelesen
includes/www.domain.de.extra.conf
Wird anch deen recommendation
-, includes/ssl.conf
- und den allgemeinen includes/extra.conf
eingelesen
includes/www.domain.de.directory.conf
Wird inner halb der <Directory>
-Direktive für den Document-Root und nach includes/directory.conf
eingelesen
includes/www.domain.de.overwrite.conf
Wird ganz zum Schluss nach allen Konfigurationen des Macros eingelesen.
Der $baseDir
definert da Basis-Verzeichnis für den Publikationsbereich
Der $serverName
gibt an, unter welcher Domain die Webseite erreicht werden soll. Server-Aliases können in includes/www.domain.de.common.conf
definiert werden.
Der $sitekitToken
erlaubt die Aktivierung von Debugging-Werkzeugen in Produktiv-Systemen.
Aus den Angaben werden im Macro folgende Variablen definiert:
Define APP_PUBLIC $baseDir/app/public
Define FRONTEND_PUBLIC $baseDir/frontend/public
Define MEDIA_PUBLIC $baseDir/resources/media/public
Define RESOURCE_ROOT $baseDir/resources
Diese Konfiguration basiert auf einem definierten Verzeichnis-Layout unterhalb von /var/www/domain.de/www
(oder z.B. auch /var/www/domain.de/preview
, je nach Publikationsbereich).
/var/www/domain.de
+ www
+ app -> IES_WEBNODE_HOME/feds/my-project-feds
+ public
+ frontend -> IES_WEBNODE_HOME/feds/my-project-frontend
+ public
+ resources
+ media
+ public
-
app/
: In diesem Verzeichnis liegt die Serverseitige Applikationslogik. Diese wird vomFEDS
-Projekt bereit gestellt. DasFEDS
-Projekt liegt unterhalb vonIES_WEBNODE_HOME/feds
. Über den Link wird definiert welchesFEDS
-Projekt verwendet werden soll. Es muss immer einpublic/
-Verzeichnis enthalten. -
frontend/
: In diesem Verzeichnis liegen alle Frontend-Dateien. Diese wird vomFrontend
-Projekt bereit gestellt. DasFrontend
-Projekt liegt unterhalb vonIES_WEBNODE_HOME/frontend
. Über den Link wird definiert welchesFrontend
-Projekt verwendet werden soll. Es muss immer einpublic/
-Verzeichnis enthalten. -
resources/
: In diesem Verzeichnis liegen alle vom CMS publizierten Inhalte. Öffentlich zugängliche Medien, die direkt vom Webserver ausgeliefet werden dürfen liegen unterhalb vonresources/media/public
Durch das zusammenführen der drei Bereiche FEDS
, Frontend
und RESOURCES
ergeben sich im Prinzip drei public
-Verzeichnisse, die gemeinsam den Dokument-Root bilden. Da es aber nur einen Dokument-Root geben kannt wird dies wie folgt gelöst.
Die Lösung hierfür ist ein Verzeichnis als Document-Root zu definieren und die zwei übrigen über rewrite
-Regeln einzubinden.
APP_PUBLIC
wird als DOCUMENT_ROOT
festgelegt.
DocumentRoot ${APP_PUBLIC}
Dann folgt eine rewrite
-Regeln für das Medien-Verzeichnis:
RewriteCond ${MEDIA_PUBLIC}%{REQUEST_URI} -f
RewriteRule ^ ${MEDIA_PUBLIC}%{REQUEST_URI} [L]
Mit dieser Regel wird geprüft, ob die Datei ${MEDIA_PUBLIC}%{REQUEST_URI}
existiert. REQUEST_URI
ist der Pfad der angefragten Url. Z.B. /service/illu.jpg
. Es wird nun geprüft ob die Datei /var/www/domain.de/www/resources/media/public/service/illu.jpg
existiert. Ist dies der Fall wird sie zurück geliefert.
Ist dies nicht der Fall, wird die nächste Regeln geprüft:
RewriteCond ${FRONTEND_PUBLIC}%{REQUEST_URI} -f
RewriteRule ^ ${FRONTEND_PUBLIC}%{REQUEST_URI} [L]
Mit dieser Regel wird geprüft, ob die Datei ${FRONTEND_PUBLIC}%{REQUEST_URI}
existiert. Z.B. wird mit /js/main.js
geprüft, ob die Datei /var/www/domain.de/www/frontend/js/main.js
existiert. Ist dies der Fall wird sie zurück geliefert.
Ist dies nicht der Fall, wird die nächste Regeln geprüft:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^ /index.php [L]
Mit dieser Regel wird geprüft, ob die Datei ${DOCUMENT_ROOT}%{REQUEST_URI}
nicht existiert. Z.B. wird mit /service/abfall/index.php
geprüft ob die Datei /var/www/domain.de/www/app/public/service/abfall/index.php
nicht existiert. Dies ist hier auch nicht der Fall, da in der Regeln in dem app/public
-Verzeichnis nur eine index.php
liegt, die als Front-Controller für die Applikation dient. Die Regel trifft also hier zu und der Request wird an den Front-Controller der Applikation weitergeleitet. Ab hier wird über PHP-Logik jeder Request weiterverarbeitet, für die in den Verzeichnissen resources/media/public
, frontend/public
und app/public
die entsprechende Datei nicht gefunden werden konnte.
Sollte in dem app/public
die angefrage Datei liegen, greift die Regel nicht und der Apache würde sie ausliefert, das app/public
als Document-Root definiert ist.
Daraus ergibt sich eine Art virtueller Dokument-Root aus den drei genannten public
-Verzeichnissen, bei der noch folgende Überschreibungs-Regeln gelten:
Da das resources/media/public
-Verzeichnis zuerst geprüft wird, ist das CMS in der Lage die Resoucen von frontend/public
und app/public
zu überschreiben.
Da das frontend/public
-Verzeichnis als zweites geprüft wird, überschreibt das frontend/public
-Verzeichnis Dateien im app/public
-Verzeichnis.