2013-04-18 3 views
8

새로운 것을 많이 좋아하는 새 아파치 httpd 2.4을 아주 좋아합니다!아파치 정규식 backreferences httpd 2.4에서 유레일런트?

ap_expr 새로운 매우 유망한 기능 중 하나입니다, 다음 SSI 스 니펫 ..하지만

가 예상대로 작동하지 않습니다
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}} 

실무에 불과하다 경우 var에 ISN ' 세트! 이것은 의미가 없습니다.

하는 error.log는 말한다 :

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

기타 문서 (http://httpd.apache.org/docs/2.4/expr.html#other)는 혼란과 어디 근처에 샘플을이 없습니다.

유사한 정규식 구문 분석을하는 내가 SSI에 대한 레거시 (해결 방법) 스위치가 있음을 알고 ..하지만 난 옛날 시작 - 이후를 사용하지 않고 최종 태그Legacy

강요 SetEnvIfExpr w -tricks가 documentation에 따르면 하나

+2

작동하는 것으로 보인다는 사실 사용하여 문제를 해결할 수 있습니다 "그들은 일반적으로 만 일치하는 정규식과 같은 표현에 사용하지만, 일부 모듈은 특별한 사용을 허용 할 수 있습니다." 그게 문제라고 상상해보십시오. 그리고 그 도메인이 무엇이든, "동일한"표현식에 과제를 맞추어야합니다. –

답변

0

도움이되지 않습니다

정규 표현식은 문자열 $ 0 역 참조 ... $ 9 캡처 그룹을 참조 할 수 있도록 이전에 실행 된 정규 표현식과 일치합니다. 일반적으로 일치하는 정규 표현식과 동일한 표현식에서만 사용할 수 있지만 일부 모듈에서는 특수 용도로 사용할 수 있습니다.

당신은 캡처 그룹을 사용하고 인덱스 1을 사용하여,이 표준 정규식 엔진을 사용하여 확인을해야한다는 참조하고 있지만, $0...$9에서 참조 할 수있는 설명서에 따라. 나는 아파치 1 대신 캡처 그룹과 색인 전압 0를 작성 추측하고는 사용에 의해 $0regex capture $1 is out of range

변경 인덱스 $1를 얻을 수있다 :

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

아파치 개발자가 휠을 재발 명한다고 생각하지 않습니다. – hjpotter92

+0

@ hjpotter92 lol 미안하지만 ... 생각 했어 –

1

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

을 변경하여 ~

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

하나는 $ 0

+0

인생이 더 안전 해!(실제로는 아니지만 이것은 많은 도움이되었습니다.) – Mchl

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

이것은 다른 답변의 코드와 거의 동일한 코드 덩어리입니다. 이 코드를 유용하게 사용하려면 코드가 수행하는 작업과 해당 질문에 대한 대답에 대한 설명이 있어야합니다. 다른 응답의 코드와 매우 유사하다는 점을 감안할 때 왜 다른 코드와 다른지 설명해야합니다. – AdrianHHH

관련 문제