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 -->

Я попытался изменить синтаксис различными способами, например, чтобы избежать использования сопоставления с регулярным выражением и использовать вместо этого точное сравнение строк, но это тоже не сработало. Я не мог заставить ни одно выражение работать в новом синтаксисе.

Почему новый синтаксис не работает?

0 ответов

Другие вопросы по тегам