apache rewriterule을 다시 작성하십시오
-
19-09-2019 - |
문제
나는 가지고있다 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
), 다음 규칙을 실행하십시오. 그렇지 않으면 규칙을 건너 뛰고 계속 진행하십시오.
다른 팁
다른 변형 :
# %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]