2014-03-04 1 views
0

나는 어떤처럼 보이는 문자열이 다음의 nginx 정규식 : 구분자가있는 경우 감지

rewrite ^/tag/example/(\d*)/(.*) /example/$1/$2; 
:

1) /tag/example/123 
2) /tag/example/123/ 
3) /tag/example/123/1v1 
4) /tag/example/123/1v1/yes/no/maybe 

내가이 모양이 문자열의 nginx에 재 작성을하고있는 중이 야

$ uri는 문자열 1의 경우/example/123처럼 보이게해야합니다./example/123/1v1 문자열 3). 등등 ...

이 재 작성을 사용하면 나머지 문자열이 $ 1이 123과 $ 2가되어야합니다. 123 (문자열 1) 뒤에 아무 것도 없으면 null이되도록 $ 2가 필요합니다. 이 정규식은 2), 3) 및 4)에서 작동하지만 1)에서는 작동하지 않습니다.

1) Aborts 
2) $1 = 123, $2 = NULL 
3) $1 = 123, $2 = 1v1 
4) $1 = 123, $2 = 1v1/yes/no/maybe 

어떻게이 모든 문자열 작업을 얻을 수 있습니다 : 1) /이 123

출력 후 없기 때문에 재 작성이 중단 무엇입니까?

+0

각 URL의 시작 부분에서'/ tag'를 제거하고 싶을뿐입니다. 나는'nginx'에 익숙하지 않지만,'rewrite ^/tag /(.*)/$ 1'이 효과가있는 것처럼 보입니다. – chepner

+0

불행히도 나머지 부분과 숫자 (123)를 구분할 수 있어야합니다. 따라서 $ 1은 숫자 만 가지고 나머지는 $ 2에 저장됩니다. – Zonxwedop

답변

0

이렇게 해 보셨습니까?

rewrite ^/tag/example/(\d*)/?(.*) /example/$1/$2; 
+0

그게 전부 야! 방금 캐시의 희생자가되었음을 깨달았습니다. 나는 웹 브라우저를 통과하는 프록시 서버를 통해 테스트 중이었고 캐시를 지우지 않았고 문자열을 그대로 두었 기 때문에 이전 요청을 구문 분석하고있었습니다. 이전에 시도했지만 캐시 된 일부 주소로 라우팅해야합니다. 감사! – Zonxwedop

0

나는이 nginx에로 변환 있는지 확실하지 않습니다,하지만 펄 정규 표현식에 대한 당신과 같이 비 캡처 괄호를 사용해야합니다 :

s^(?:/tag)?(?:/example)((((/\d*)(/)?)(1v1)?)(/yes/no/maybe)?)^example/$1$2$3$4^g 

을 나는 '사용했습니다 두려워^'대신에/대답을 간단하게 유지 - 그 nginx에서 그 치환을 사용할 수 있는지 여부를 말할 수 없지만, 정규식이 좋다고 생각합니다.

+0

나는 그것을 너무 명확하게 만들지는 못했지만 문자열의 유일한 리터럴은/tag/example /이고 123 섹션은 숫자 여야 만합니다 (그래서 \ d *를 사용하는 이유입니다). 그러나 어떤 숫자도 될 수 있습니다. 1v1 및 다른 섹션은 모두 서로 다른 문자열 또는 숫자 또는 둘 다를 조합 할 수 있습니다. – Zonxwedop

0

난 당신이 문제를 해결할 생각하지만, 드문 경우에 다른 사람이 슬래시 사이의 영숫자 문자의 조합이 가능하도록 코드를 수정하는 방법을 볼 수 없습니다, 나는 이것이 좋은 있어야한다고 생각합니다 :