Yesterday at work someone was trying to pass traditional Apache SSI directives through an XSL transformation on a Google search appliance. Long story short, they vanished: HTML comments don’t make it out of that device.
Anyway…I had a simple solution. Since we were pumping the Google results through a Perl CGI anyway, there was no reason we couldn’t just output a fake HTML tag which the CGI would then turn into an SSI comment for Apache. This was born
<ssi virtual="/foo/bar.html" />.
Then a simple
s/<ssi (virtual=\"[^\"]+\")><\/ssi>/<!--#include $1 -->/; in Perl will give something Apache can understand.
That solved the immediate problem, but got me thinking about emulating the full Apache mod_include set of SSI directives using the
<ssi> tag. I’m thinking of something like this:
<ssi element="include" virtual="/foo/bar.html" /> <ssi element="set" var="FOO" value="BAR" /> <ssi element="if"> <ssi_if expr="test_condition">YES!</ssi_if> <ssi_elif expr="test_condition">MAYBE!</ssi_elif> <ssi_else>NO!</ssi_else> </ssi>
And with that format, the original version still works if you assume a missing “element” attribute implies
<!--#if --> block isn’t quite satisfying here — any text nodes inside the
<ssi> block but outside the
<ssi_(if|elif|else)> blocks would be ignored, but that’s no different than odd content in, say, a
<table> that doesn’t actually fall into a cell.
I don’t actually have the Perl that would do the transformation, but it wouldn’t be hard. I’ll wait until someone actually needs it.