문제

나는 가지고있다 RewriteMap 다음과 같이 보입니다.

Guide           1
Mini-Guide      2
White Paper     3

그리고 나는 그것을 포함시킨다 Apache ~을 통해

RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt

나는 만들고 싶다 RewriteRule SAL의 왼쪽에서만 값만 허용합니다. RewriteMap 이 위치에 있으면;

RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2

나는 내가 사용할 수 있다는 것을 안다 ${legacy} 오른쪽에 있지만 왼쪽에서 사용할 수 있습니다. 그렇다면 어떻게합니까?

도움이 되었습니까?

해결책

지도 파일에서 왼쪽은 키이고 오른쪽은 값입니다. 맵과 일치하는 규칙을 작성하면 키를 입력하고 값을 출력합니다.

다시 쓰레기를 변경하십시오.

# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
            /blah.php?subsection=${legacy:$1}&title=$2

첫 번째 그룹화는 들어오는 URL에서 문자열을 캡처합니다. 교체의 $ 1은 이름이 지정된 맵에 적용됩니다. 기본값을 만들려면 변경하십시오 ${legacy:$1} 에게 ${legacy:$1|Unknown}.

마지막으로 규칙이지도 파일에있는 값에 대해서만 작동하기를 원한다면 RewriteCond:

RewriteCond ${legacy:$1|Unknown} !Unknown
# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
            /blah.php?subsection=${legacy:$1}&title=$2

맵이 기본값을 반환하지 않으면 조건이 표시됩니다 (Unknown), 다음 규칙을 실행하십시오. 그렇지 않으면 규칙을 건너 뛰고 계속 진행하십시오.

Apache Rewritemap

다른 팁

다른 변형 :

# %1 will be the subpattern number1 afterwards
RewriteCond %{REQUEST_URI} ^/section/downloads/(.*)
# check if there is no mapping for %1
RewriteCond ${legacy:%1} !^$
# if there is rewrite it
RewriteRule ^/(.*) /blah.php?subsection=${legacy:%1}&title=$2 [R]

당신은지도에서 발견 된 값 만 허용하고 싶다고 말했습니다. 캡처 그룹에 대한 Regex에서 추가 제한을 지정하지 않는 한 불가능합니다. 지도 자체와 함께 할 수있는 방법이 없습니다. 내가 아는 한 "Map.keys"구문은 없다.

하지만,
캡처 된 값을 찾을 수없는 경우 기본값을 지정할 수 있습니다. 이 방법:

## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
        /blah.php?subsection=${legacy:$1|defaultValue}&title=$2

"DefaultValue"를 원하는대로 바꾸십시오. 주어진 ARG가 맵에서 찾을 수없는 경우 0 (0) 또는 "NotFound"입니다.

그런 다음 다른 규칙으로 결과를 다시 작성하거나 유입되어 기본값이있는 URL에서 "404"메시지를 제공 할 수 있습니다.

다른 규칙을 사용하기로 선택하면 다음과 같습니다.

## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
        /blah.php?subsection=${legacy:$1|notFoundMarker}&title=$2

## This rule fires if the lookupKey was not found in the map in the prior rule.
RewriteRule ^/blah.php?subsection=notFoundMarker  /404.php   [L]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top