nginx의 정규 표현식에서 변수를 사용하는 방법은 무엇입니까?

nginx의 정규 표현식에서 변수를 사용하는 방법은 무엇입니까?

나는 이 질문을 쓰기 전에 답을 찾으려고 시간을 보냈습니다.

location내 nginx 구성 파일에는 다음과 같은 여러 블록이 있습니다 .

location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }

location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }

location ~ ^/(doc|img|bla|foo)/something/$ { ... }

그래서 반복되는 정규 표현식을 섹션에서 설정한 변수로 리팩토링하는 것이 좋은 생각이라고 생각했습니다 server(또한 나중에 추가해야 한다는 것을 알고 있기 때문입니다).

server {
     set $my_regex doc|img|blah|foo;

     # I also tried this one:
     set $my_regex "doc|img|blah|foo";
     ....
}

그런 다음 위치 블록 내에서 재사용합니다.

# this doesn't have any effect
location ~ ^/($my_regex)/metadata/$ { ... }

# this one neither
location ~ ^/(\$my_regex)/deleted/$ { ... }

# and this one neither
location ~ ^/(${my_regex})/something/$ { ... }

어떤 아이디어? 감사해요!

답변1

일치 에 변수를 사용할 방법이 없습니다 location.

원한다면 뭔가 잘못하고 있는 것일 수도 있습니다. 이 경우 중첩 위치를 시도해 볼 수 있습니다.

답변2

이쪽에서 확인해 주세요링크NGINX에서 말했듯이선적 서류 비치

The PCRE library supports named captures using the following syntax:

?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0
?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0
?P<name>    Python compatible syntax, supported since PCRE-4.0

명명된 캡처는 PCRE의 기능이며 버전마다 사용할 수 있는 구문이 다릅니다. 사용하는 구문에 대해 ? 최소한 PCRE 7.0이 있어야 합니다.

관련 정보