나는 다음을 시도하고 있습니다
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