SSI/mod_include: новый синтаксис ap_expr не работает, как описано
Мой веб-сайт использует SSI (в том числе на стороне сервера) для проверки состояния (используя #if expr
) и возвращает другой HTML-код в зависимости от того, является ли условие истинным или ложным. Раньше это работало хорошо в течение многих лет, до недавнего времени мой сайт начал показывать ошибку [an error occurred while processing this directive]
, Я узнал, что expr
Синтаксис изменился в более новых версиях Apache httpd, поэтому я предполагаю, что мой хостинг-провайдер недавно обновил Apache httpd, что привело к поломке старого синтаксиса. Apache httpd теперь находится на версии 2.4.29.
Мне удалось временно решить проблему, добавив SSILegacyExprParser on
к моему .htaccess
файл, чтобы вернуться к старому синтаксису (благодаря этому вопросу). Но я хотел бы найти постоянное решение, используя новый синтаксис.
Вот старый синтаксис SSI-кода, который работает с SSILegacyExprParser on
:
<!--#if expr="${thisDoc} = /impressum\.shtml/" -->
<li id="current">
<!--#else -->
<li>
<!--#endif -->
(Переменная thisDoc
был установлен ранее.)
Вот код SSI, использующий новый ap_expr
синтаксис, который не работает. Это показывает [an error occurred while processing this directive]
снова. При написании этого кода я следовал документации по адресу http://httpd.apache.org/docs/current/expr.html:
<!--#if expr="%{thisDoc} =~ /impressum\.shtml/" -->
<li id="current">
<!--#else -->
<li>
<!--#endif -->
Я попытался изменить синтаксис различными способами, например, чтобы избежать использования сопоставления с регулярным выражением и использовать вместо этого точное сравнение строк, но это тоже не сработало. Я не мог заставить ни одно выражение работать в новом синтаксисе.
Почему новый синтаксис не работает?