2013-02-14 17 views
5

niektóre wyrażenia serwer niepożądane to nie są już roboczych po uaktualnieniu serwera z wersji 2.2 do 2.4, dając mi szereg błędów:Jak działa wyrażenie w apache 2.4?

AH01337: nie można analizować wyraż „$ SERVER_NAME = abc” in /var/www/err/ft.html.var: Błąd analizy w pobliżu '$'
AH01337: Nie można zanalizować wyrażenia "! $ REDIRECT_STATUS" w /var/www/err/tp.html: Błąd analizy w pobliżu "$"
AH01337: Nie można zanalizować wyrażenia "$ HTTP_HOST = /^([az]{2}\.)abc\.com/ & & $ SERVER_NAME = abc \ .com" w/var/www/err /tp.html: Błąd analizy blisko „$”

Rozumiem, że jest to spowodowane jakimś ongoing effort używać jednego wariantu tylko, zwany ap_expr, dla wszystkich dyrektyw konfiguracyjnych. Jednak po przeczytaniu dokumentacji, ja wciąż nie mam pojęcia w jaki sposób przekonwertować niektóre z mojego starego kodu, aby odzwierciedlić tę zmianę:

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

Czy wdzięczni, jeśli ktoś może wskazać, w jaki sposób powyższe zostanie zmieniona na zaczynaj. Dzięki!

+0

przyjrzeć się tej http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser wydaje się, że trzeba to mieć na użycie składni stary. – 244an

+0

@ 244an, tak, widziałem to. Po prostu chcesz poznać nową składnię, na wypadek gdyby ta opcja została wycofana w przyszłości. –

Odpowiedz

1

UWAGA

Próbowałem aktywować dyrektywy:

SSILegacyExprParser na

(jak wspomniano powyżej w komentarzu)

ale także zabił moje configs SSIStartTag ..

Nie bardziej miły {{echo var = „zm1”}}

Pamiętaj, że redaktorzy XHTML będzie dławik czy stary komentarz składnia pojawiać wewnątrz atrybutów> :-(

0

będę oczekiwać, że jeśli zainteresowany nowa składnia, będziesz skończyć z czymś takim:

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

nie jestem pewien co do $ 1, ponieważ nie miałem takiego używania w co właśnie zamienione ostatniej nocy (kilka ludzie myślę, że może być użyteczny tylko w ramach tej samej expr jest przechwytywany). Znalazłem pewne problemy z wyrażeniami regularnymi NIE działającymi w oczekiwany sposób, na przykład takie wyrażenia, które określają, czy sprawdzam, ile wynosi obecny katalog lub pod-dokument. Ostatnia linia pasuje do identyfikatora URI kończącego się na "/", ale straciłem kilka godzin, stwierdzając, że% {REQUEST_URI} NIE zadziała, tylko formularz v ("REQUEST_URI") (jakoś spodziewam się znaleźć odwrotność true dla czegoś).

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