Les XSSI (eXtended Server Side Include) ont été introduits pour combler
certaines lacunes des SSI. L'esprit reste toujours de faire un langage
de script minimum, mais la syntaxe a été rendue plus flexible (gestion
des expressions rationnelles et des variables), la commande if
a été modifiée pour être plus naturelle, et la commande
printenv a été ajoutée.
Les XSSI permettent d'utiliser des expressions régulières et des variables au sein des chaînes de caractères. Cet ajout rend ce langage beaucoup plus puissant.
<!――#COMMANDE PARAM="$VARIABLE" ――>
Ou encore :
<!――#COMMANDE PARAM="blabla${VARIABLE}blabla"
――>
On peut utiliser les expressions régulières habituelles sous Unix. Je ne détaillerais pas la syntaxe des expresions rationelles dans ce document.
À propos des expressions rationnelles, je vous conseille fortement la
lecture de la page manuel de la commande egrep (man
egrep) ou de sh (man sh).
Par exemple :
<!――#if expr="\"${SERVER_NAME}\" =
/.*\.linux-france\.fr/" ――>
S'execute seulement si le serveur qui l'a contacté a une adresse qui se finit en ".linux-france.fr".
On peut, de plus, faire des affectations de valeur à une variable :
<!――#set var="VARIABLE"
value="VALEUR"――>
Par exemple :
<!――#set var="DOCUMENT_NAME"
value="Ma PageWeb"――>
À partir de cette balise, la variable DOCUMENT_NAME contiendra
la chaîne de caractères Ma PageWeb.
La commande printenv est ajouté et la syntaxe if est
plus naturelle.
printenvÉcrit la liste de toutes les variables existantes et leur valeurs.
if, elif, else, endifCes commandes permettent d'effectuer une exécution sous certaines conditions. La syntaxe se rapproche beaucoup de celle de la programmation classique :
<!――#if expr="TEST1" ――>
CODE HTML 1
<!――#elif expr="TEST2" ――>
CODE HTML 2
<!――#else ――>
CODE HTML 3
<!――#endif ――>
Si TEST1 est vrai, c'est CODE HTML 1 qui sera executé.
Si TEST1 est faux et TEST2 est vrai, c'est CODE
HTML 2 qui sera executé. Enfin, si ni TEST1, ni
TEST2 ne sont vrai, c'est CODE HTML 3 qui sera
executé.
Les TEST sont des comparaisons de chaînes de caractères (on
peut utiliser les expressions régulières). Voici un rapide survol des
possibilités :
stringVrai si string est non vide,
string1 = string2Teste l'égalité des chaînes de caractères,
string1 != string2Teste la différence des chaînes de caractères,
(test)Test si test est vrai,
!testTeste la négation de test,
test1 && test2Teste la conjonction de test1 et test2 (ET logique),
test1 || test2Teste si l'un des deux est vrai (OU logique).
Exemple :
<!――#if expr="REMOTE_ADDR != 197\.1??\.17\.2"――> <A href="secret-link.html">Lien secret</A> <!――#endif ――>