RewriteCond 에서 RewriteMap 조회 사용. 가능한?

RewriteCond 에서 RewriteMap 조회 사용. 가능한?

나는 다음을 시도하고 있습니다

RewriteMap lookup "txt:D:/lookup.txt"
RewriteCond %{REQUEST_URI} ^/${lookup}
RewriteRule ^/(.*)/(.*)$ /a/$1/b/$2.html [PT,L]

요청 경로가 유효한 경로로 시작하는지 비교하려고 합니다.

조회 파일에 긴 경로 목록이 있습니다.

이에 대해 도와주세요.

답변1

나는 정규식에 변수를 가질 수 없다는 것을 발견했습니다 RewriteCond. 왜냐하면 그것이 한 번만 컴파일되고 요청별로 컴파일되지 않는 것처럼 보이기 때문입니다.

구분 기호(쉼표로 가정)를 사용하여 및 테스트 문자열에 둘 다 입력한 다음 동일한지 확인하여 ${lookup}이 문제를 해결할 수 있습니다. 예:%{REQUEST_URI}

RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),\1

또한 이 샘플 URL에 대해 다음을 참고하세요 http://mydomain.dom/abc/mypage.html.

%{REQUEST_URI} = /abc/mypage.html

하지만

${lookup:$1} = abc

따라서 는 %{REQUEST_URI}결코 와 같지 않을 것입니다 ${lookup:$1}.

요청 시 이를 동일하게 만들려면 다음을 수행해야 합니다.

  • =를 얻으려면 ${lookup:$1}로 묶으십시오 .//abc//${lookup:$1}/
  • $2요청한 파일도 얻으려면 추가하세요 : /abc/mypage.html= /${lookup:$1}/$2
  • 귀하의 키는 /abc/(이 아닌 )이므로 키 와 일치하도록 abc다음을 포함해야 합니다 .$1//${lookup:/$1/}/

마침내 당신은 이것을 갖게 될 것입니다 :

RewriteMap lookup "txt:/var/www/lookup.txt"
RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),\1
RewriteRule ^/(.*)/(.*)$ /a/$1/b/$2 [R=301]

http://mydomain.dom/abc/mypage.html나에게 다음 로그를 제공 합니다 :

(1) pass through /a/abc/b/mypage.html

관련 정보