2013-04-18 14 views
8

Ich liebe die neue Apache httpd 2.4 mit vielen neuen coolen Sachen!Apache Regex Rückverweise UNREACHABLE in httpd 2.4?

ap_expr ist eine dieser neuen vielversprechenden Eigenschaften,

..aber die folgende SSI-Snippet nicht wie erwartet funktionieren:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}} 

Die wenn funktioniert, aber die var isn‘ t gesetzt! Dies ergibt keinen Sinn.

error.log sagt:

.. AH01330: regex capture $1 is out of range 

Der Doc (http://httpd.apache.org/docs/2.4/expr.html#other) ist verwirrend und haben keine Proben irgendwo in der Nähe.

Ich weiß, dass es ein Vermächtnis (Umgehung) Schalter für SSI .. aber ich will es nicht, da alten START- verwenden und End-Tags werdenLegacy

Doing ähnliches regex-Parsing gezwungen -tricks w SetEnvIfExpr ist auch nicht

+2

zu arbeiten $ 0 scheint „Sie können in der Regel nur verwendet werden, in dem gleichen Ausdruck wie die passenden Regex, aber einige Module erlauben spezielle Anwendungen.“ Ich stelle mir vor, dass das das Problem ist, und Sie müssen die Zuweisung in den "gleichen" Ausdruck passen, egal welche Domäne es ist. –

Antwort

0

nach den documentation helfen:

Regulärer Ausdruck Rückreferenzierungen die Saiten $ 0 ... $ 9 erlaubt die Erfassung Gruppen zu verweisen von zuvor ausgeführten, erfolgreich passenden regulären Ausdrücken. Sie können normalerweise nur im selben Ausdruck wie der passende Regex verwendet werden, aber einige Module erlauben spezielle Anwendungen.

Sie verwenden eine Erfassungsgruppe und Sie verweisen, dass 1 Index verwenden, dies in Ordnung sein sollte, ein Standard-Regex-Engine verwendet wird, sondern nach der Dokumentation, die Sie von $0...$9 verweisen können. Ich denke, Apache ist der inde 0 mit Erfassungsgruppe Füllung statt 1 und das sind Sie die regex capture $1 is out of range

ändern Erhalten der Index $1 zu $0 unter Verwendung:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}} 
+0

Scheint so zu sein, aber ich glaube nicht, dass Apache-Entwickler das Rad neu erfinden würden! – hjpotter92

+0

@ hjpotter92 lol Entschuldigung Mann ... dachte, du hast –

1

von

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$1"}} 
{{endif}} 

Wechsel zu

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$0"}} 
    {{if expr="v('user') =~ /([^&]+)$/"}} 
     {{set var="user" value="$0"}} 
    {{endif}} 
{{endif}} 

kann man das Problem umgehen, unter Verwendung der Tatsache, dass

+0

Ein Leben sicherer!(nicht wirklich, aber das hat mir sehr geholfen) – Mchl

0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}} 
    {{set var="user" value="$0"}} 
{{endif}} 
+0

Dies ist nur ein Stück Code, der fast identisch mit dem Code in anderen Antworten ist. Damit dieser Code nützlich ist, sollte er erklären können, was er tut und warum er die Frage beantwortet. Da es dem Code in anderen Antworten so ähnlich ist, sollte es auch erklären, warum es anders ist. – AdrianHHH

Verwandte Themen