Apache 2.4.3 SSI if expr no variables?

Daniel picture Daniel · Jan 28, 2013 · Viewed 9.6k times · Source

I have many files with small differences. The included file contains this, which tries to differentiate on one part of a longer path:

<!--#if expr="${DOCUMENT_URI}=/internet/"-->Internet<!--#else-->Intranet<!--#endif-->

In the error log I get

AH01337: Could not parse expr "${DOCUMENT_URI}=/internet/" in /opt/apache/htdocs/ssi/time.shtml: Parse error near '$'

I find many variations on this theme, like no braces, parentheses around the inside of the quotes, space before the comment end or =~, but nothing helps. There doesn't seem to be a debug setting for mod_include, which would tell me what's wrong...

Another variant I found is

<!--#if expr='"${DOCUMENT_URI}"=~/internet/'-->

this gives no error. But it always chooses the else branch, likewise with REQUEST_URI, as though the variables were unset. But I can echo them fine. I also tried /.+internet.+/ in case it was anchoring this.

Since these are CGI variables I also tried loading cgid_module – no good either.

Answer

Tom Curran picture Tom Curran · Jul 5, 2013

As of version 2.3.13, mod_include has switched to the new ap_expr syntax for conditional expressions in #if flow control elements.

Add the SSILegacyExprParser on directive to switch to the old syntax which is compatible with Apache HTTPD version 2.2.x and earlier.

http://httpd.apache.org/docs/current/mod/mod_include.html#ssilegacyexprparser