2017-02-05 6 views
1

내 요구 사항은 URL이 재 작성 맵 파일에 있는지 확인하는 것입니다.uri가 rewriteemap에 존재하는지 확인하려면 어떻게해야합니까? 아니면 404 페이지로 이동합니까?

RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
RewriteRule ^(.*) ${plp-map:$1|/content/mysite/en_ca/home/errors/404.html} [PT,QSA] 

그것은 /invalid.html에 대한 사용자 정의 404 페이지를로드하는 :하지가 존재하는 경우,이 상태 코드로 사용자 정의 404 페이지를 표시해야합니다

(404)은 원래이 코드는 목적을 제공합니다. 그러나 상태는 200이었습니다. 다음으로 map에 ErrorDocument가없는 경우 goto로 규칙을 작성했습니다. 그렇지 않으면 리디렉션합니다. 아래 : 오류 = ""

map lookup FAILED: map=plp-map[dbm] key= 

은 $ 1은 항상 URL을 반환 안 : {$ 1 PLP 맵}

RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
RewriteCond ${plp-map:$1} ="" 
RewriteRule .? - [S=2] 
    RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
    RewriteRule ^(.*) ${plp-map:$1} [PT,QSA]  
    RewriteRule .? - [S=1] 
RewriteRule ^(.*)$ - [L,R=404] 
ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html 

지금이 규칙은 세 번째 줄한다 RewriteCond $에 실패? 여하튼 나는지도 입력을 점검하는 상태로 URL을 전달할 부분을 놓치고있다. 이 문제를 해결하는 방법? 또한 내 문제에 대한 더 나은 솔루션이 있습니까?

답변

1

아니요, $1은 URL을 반환하지 않습니다. 현재 RewriteRule 정규 표현식에서 캡처 된 첫 번째 그룹의 결과를 반환합니다.

실제로지도로 URL을 변경 하시겠습니까, 아니면 테스트 만 하시겠습니까? 그냥 테스트의 경우, 당신이 필요로하는 모든입니다

RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html 

RewriteCond ${plp-map:$1} ="" 
RewriteRule ^(/en/home/categories/.*)$ - [R=404,L] 

당신은 또한 그것을 변경하는 경우는, 위의 후이 추가 :

RewriteCond ${plp-map:$1} !="" 
RewriteRule ^(/en/home/categories/.*)$ ${plp-map:$1} [PT,QSA] 
+0

휴 ..이 내 문제를 해결하고 규칙을 단순화 잘. 고마워. –