3.8. Logiske udtryk

Det er muligt at anvende logiske udtryk i SSI. Dette minder lidt om #define, #ifdef,#else og #endif i C/C++. Syntaksen i SSI er:

<!--#if expr="betingelse" -->
<!--#elif expr="betingelse" -->
<!--#else -->
<!--#endif -->

Tabel 3-2. Betingelser:

Streng Er sandt hvis strengen ikke er tom.
Streng1=Streng2 Er sand hvis Streng1 og Streng2 er identiske.
streng=/regularudtryk/ Er sand hvis regular udtrykket matcher strengen.
Streng1!=Streng2 Er sand hvis Streng1 og Streng2 er forskellige
betingelse1 && betingelse2 Er sand hvis BÅDE betingelse1 OG betingelse2 er sande, ellers falsk.
betingelse1 || betingelse2 Er sand hvis ENTEN betingelse1 ELLER betingelse2 er sande.
!betingelse Er sand hvis betingelsen er falsk, og falsk hvis betingelsen er sand. (negation)
(betingelse) Er sand hvis betingelsen er sand, ellers falsk.

Strenge må ikke indeholde whitespace, dvs. mellemrum, tabulartor oa. Skal strenge matches der inderholder whitespace må de skrives med aprostroffer som 'string1' = 'streng2'. Apaches SSI bruger den samme dialekt til regulære udtryk som egrep. For mere information om regulære udtryk se man egrep.

Et eksempel:

<body>
<!--#if expr="${HTTP_USER_AGENT} = /Mozilla/" -->

  Du bruger Netscape!
     <!--#if expr="${HTTP_USER_AGENT} = /Gecko/" -->
       Og din browser er bruger Gecko rendering engine!
     <!--#endif -->

<!--#elif expr="${HTTP_USER_AGENT} = /MSIE/" -->

  Du bruger Explorer.

<!--#else -->
  Din browser kan ikke genkendes.
<!--#endif -->
</body>

I dette eksempel bruges SSI til at genkende hvilken browser der bruges, og sende specielle HTML-koder til de forskellige browsere. HTTP_USER_AGENT-linjen fortæller hviken browser brugeren anvender.

Tabel 3-3. HTTP_USER_AGENT for nogle typiske browsere

Netscape 4.73 Mozilla/4.73 [en] (X11; U; Linux 2.2.16-3 i686)
Galeon Mozilla/5.0 (X11; U; Linux 2.2.16-3 i686; en-US; Galeon) Gecko/20000807
Mozilla M17 Mozilla/5.0 (X11; U; Linux 2.2.16-3 i686; en-US; m17) Gecko/20000807
Lynx Lynx/2.8.2rel.1 libwww-FM/2.14

Slår man HostnameLookups til så modtager man DNS navnet på den server der ønsker data. Det giver en række interessante muligheder f.eks.:

<body>
<!--#if expr="${REMOTE_HOST} = /microsoft.com/" -->

Desværre - denne side er ikke tilgængelig for Microsoft-ansatte!

<!--#else -->

Dette er Tux - den mest magtfulde pingvin i verden!

<!--#endif -->
</body>

Programmet vil returnere én side til alle folk der surfer fra maskiner på Microsofts netværk og én anden side til resten af verden.