mod_rewrite는 다시 작성되지 않은 모든 것을 다시 쓰기에 보냅니다
-
19-09-2019 - |
문제
일반적인 것들로 시작하는 htaccess 파일이 있습니다.
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
그런 다음 몇 가지 다시 작성됩니다.
RewriteRule ^protect/?$ /Legal/Your-Financial-Protection.aspx [NC, L, R=301]
그런 다음 다시 쓰기로 끝납니다.
RewriteMap map txt:rewritemaps/map.txt [NC]
RewriteRule ^(.+)$ ${map:$1} [R=301]
RewriteMap에는 현재 사이트의 모든 레거시 URL 페이지와 새 사이트의 동등한 페이지로 리디렉션되는 짧은 URL이 포함되어 있습니다 (약 4K가 있으므로 실제로 맵을 사용해야합니다).
Inspiration.aspx /Inspiration.aspx
Destinations/Africa/Countries/Gabon.aspx /Destinations/Africa/Gabon.aspx
indonesia /Destinations/Southeast-Asia/Indonesia.aspx
문제는 RewriteMap을 활성화 한 (즉, 주석을 달지 않음), 모든 URL (일치하지 않은 것조차도)을 포함하여 스타일 시트, JS, 이미지 등을 포함하여 REDIRECTER로 리디렉션됩니다.
내가 뒤 따르는 것은지도의 패턴과 일치하는 Uris이며 교체품으로 리디렉션하고 다른 모든 것을 통과 할 수 있습니다 (즉, 동일하게 유지).
지도에서 기본값 $ 1을 설정하려고 시도했습니다.
RewriteRule ^(.+)$ ${map:$1|$1} [R=301]
그러나 이것은 단지 리디렉션 루프를 유발합니다. 나는 또한 모든 .css, .js, .jpg 등에 대한 재 작성을 건너 뛸 수 있다고 생각하지만 중고 파일 확장 목록을 유지할 필요는 없습니다.
참고로, 나는 Helicontech의 Isapirewrite (IIS 6에있는 것처럼)를 사용하고 있지만 APACHE에 따라 다시 작성 맵을 처리한다고 주장하지만 과거에는 문제가 없었습니다.
어떤 도움이든 큰 감사를드립니다!
감사합니다, 아담
해결책
실제로 다른지도에 쌍 만 넣으십시오. 그렇지 않으면 동일한 값으로 리디렉션하고 무한 재귀를 얻습니다.
경기가 발견 될 때만 리디렉션하려면 다음을 시도하십시오.
RewriteCond ${map:$1} ^/.+
RewriteRule ^(.+)$ %0 [R=301]
다른 팁
이 줄은 문제입니다.
RewriteMap map txt:rewritemaps/map.txt [NC]
.htaccess 파일에서 다시 작성 맵을 정의 할 수 없습니다. (문서 재 작성 참조) 서버 또는 가상 호스트 컨텍스트에서 맵을 정의 한 다음 .htaccess 파일에서 참조 할 수 있습니다. 로그 레벨을 충분히 높이면지도가로드되지 않았다는 경고가 표시됩니다.
Gumbo의 솔루션은 공간이있는 URL을 처리하지 않는 것 외에는 훌륭합니다.http://www.webmasterworld.com/apache/3830228.htm 두 가지를 결합하여 공간을 처리하는 방법에 대한 통찰력을 제공합니다.
RewriteCond ${moved:${escape:$1}} ^/.+
RewriteRule ^(.+)$ %0 [R=301]
작동하지 않습니다. 젠장, 나는 mod_rewrite를 싫어한다
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (2) init rewrite engine with requested uri /press/Partners With City.pdf
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (3) applying pattern '^(.+)$' to uri '/press/Partners With City.pdf'
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (5) map lookup OK: map=escape key=/press/Partners With City.pdf -> val=/press/Partners%20With%20City.pdf
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (6) cache lookup FAILED, forcing new map lookup
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (5) map lookup FAILED: map=moved[txt] key=/press/Partners%20With%20City.pdf
IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (4) RewriteCond: input='' pattern='^/.+' => not-matched
Adam, Gumbo의 규칙에는 키의 선행 슬래시가 포함되어 있으며, 맵의 게시 된 버전이 누락되었습니다.
Rewriteloglevel 9는 이와 같은 것들을 발견하는 데 매우 편리합니다.