2013-02-14 6 views
5

Некоторые из выражений в Server Side Include больше не работает после того, как я модернизировал сервер от версии 2.2 до 2.4, что дает мне ряд ошибок:Как работает выражение в apache 2.4?

AH01337: Невозможно разобрать выраж «$ SERVER_NAME = а» в /var/www/err/ft.html.var: Ошибка анализа около '$'
AH01337: Не удалось разобрать expr "! $ REDIRECT_STATUS" в /var/www/err/tp.html: ошибка анализа около '$'
AH01337: Невозможно разобрать выраж "$ HTTP_HOST = /^([az]{2}\.)abc\.com/ & & $ SERVER_NAME = абв \ .com" в/вар/WWW/ERR /tp.html: Ошибка анализаоколо «$»

Я понимаю, что это связано с какой-то ongoing effort только использовать один вариант, называемый ap_expr, для всех директив конфигурации. Однако, после прочтения документации, я до сих пор не имею ни малейшего представления о том, как преобразовать некоторые из моего старого кода, чтобы отразить это изменение:

<!--#if expr="! $REDIRECT_STATUS" --> 
<!--#set var="REDIRECT_STATUS" value="404" --> 
<!--#endif --> 
<!--#if expr="$HTTP_HOST = /^([a-z]{2}\.)abc\.com/ && $SERVER_NAME = abc\.com" --> 
<!--#set var="subdomain" value="$1" --> 
<!--#else --> 
<!--#set var="subdomain" value="" --> 
<!--#endif --> 

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

+0

Взгляните на этот http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser кажется, что вы должны иметь это, чтобы использовать старый синтаксис. – 244an

+0

@ 244ан, да, я это видел. Просто хочу изучить новый синтаксис в случае, если этот вариант устарел в будущем. –

ответ

1

ПРЕДУПРЕЖДЕНИЕ

Я попытался активировать директиву:

SSILegacyExprParser на

(как указано в комментарии выше)

НО, которые также убили моих SSIStartTag конфиги ..

Нет симпатичнее {{эхо вар = «var1»}}

Остерегайтесь, что XHTML редакторы задохнется, если старый синтаксис комментариев появляются внутри атрибутов> :-(

0

Я бы ожидать, что если вы заинтересованы в новый синтаксис, вы в конечном итоге с чем-то вроде этого:

<!--#if expr="-z %{REDIRECT_STATUS}" --> 
<!--#set var="REDIRECT_STATUS" value="404" --> 
<!--#endif --> 
<!--#if expr="v('HTTP_HOST') =~ /^([a-z]{2}[.])abc[.]com/ 
      && v('SERVER_NAME') == 'abc.com'" --> 
<!--#set var="subdomain" value="$1" --> 
<!--#else --> 
<!--#set var="subdomain" value="" --> 
<!--#endif --> 

я не уверен насчет $ 1, так как у меня не было такого использования в том, что я просто конвертированы прошлой ночью (несколько людей думаю, что он может быть использован только в пределах того же expr, в который он попал). Я нашел некоторые проблемы с регулярными выражениями, которые не работают, как ожидалось, например, выражение, подобное этому, чтобы определить, просматриваю ли я то, что составляет текущий каталог или поддокумент. Последняя строка соответствует URI, заканчивающемуся в «/», но я потерял несколько часов, обнаружив, что% {REQUEST_URI} НЕ будет работать, только форма v ('REQUEST_URI') (как-то я ожидаю найти обратное истинное для чего-то).

<!--#if expr="((v('REQUEST_URI') =~ m_/index.shtml_) 
      || (v('REQUEST_URI') =~ m_/index.html_) 
      || (v('REQUEST_URI') =~ m_/index.cgi_) 
      || (v('REQUEST_URI') =~ m_/$_))" -->