Apache : 수천 개의 영구 리디렉션을 처리하는 가장 좋은 방법은 무엇입니까?


20

3000 301 리디렉션 목록이 있습니다. 도움이 필요합니다

  1. 이것들을 놓을 가장 좋은 곳은 무엇입니까? 이 3000 줄을 vhost 안에 httpd.conf에 넣는 것은 혼란 스러울 것 같습니다.
  2. 수천 개의 URL을 처리하는 데 권장되는 방법은 무엇입니까?
  3. 페이지 로딩 속도와 Apache 서버로드에 얼마나 영향을 미칩니 까?

감사.

답변:


29

Include지시문을 사용 httpd.conf하여 다른 파일에서 리디렉션을 유지할 수 있습니다. 그러나 모든 요청을 많은 정규식과 대조하여 확인해야하므로 매우 효율적이지 않습니다. 또한 파일을 변경할 때마다 서버를 다시 시작해야합니다.

너무 많은 리디렉션에 대한 더 좋은 방법 은 유형의 RewriteMap 지시문 을 사용 하여dbm URI에서 리디렉션으로 맵을 선언하는 것입니다. 이 방법은 dbm 조회가 매우 빠르기 때문에 효율적이며 맵을 변경 한 후 httpd맵 파일 수정 시간 을 확인 하여 서버를 다시 시작할 필요가 없습니다 .

다시 쓰기 규칙은 다음과 같습니다 (Fedora 16 컴퓨터에서 테스트 됨).

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

그리고 dbm map은 다음 /etc/httpd/conf/redirects.txt과 같은 텍스트 맵에서 생성됩니다 .

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

명령을 사용하여

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

답변 해주셔서 감사합니다. 시도했지만 오류가 발생했습니다. 한 줄 redirects.txt 파일 내용 (공백으로 구분 된 값) mydomain.com/experiment mydomain.com/new_page 'RewriteCond $ {redirects : $ 1}! = ""'줄에서 구문 분석 오류가 발생했습니다. . /usr/local/apache/conf/httpd.conf의 314 번째 줄에있는 구문 오류 : RewriteCond : 잘못된 플래그 구분 기호를 언급 한 다음 아파치가 시작되었지만 mydomain.com/experiment (또는 mydomain의 다른 URL)를 방문 하면 오류가 발생했습니다. "요청을 완료 할 수없는 방식으로 리디렉션됩니다".
ucker August

Apache가 위의 스 니펫으로 다시 시작되지 않습니다. 도와 주시겠습니까? 로그 파일에서 이와 관련된 오류를 볼 수 없습니다.
ucker

나는 그것이 테스트되지 않았다고 말했다-나는 약간의 조정이 필요할 것으로 기대했다. 충분하다고 생각했는데 미안 사이에 공백이있을 수 없기 때문에 아파치가 시작되지 않았습니다 !=그리고 ""내가 작업에 내 예를 수정하고 현재 버전을 테스트 한 -.
Tometzky

한 가지 의견 : 리디렉션이 쿼리 문자열 ( ?URL 이후의 모든 것)에 의존 해야하는 경우 다른 방법을 사용해야 하지만 가능합니다 . 이제는 리디렉션 할 쿼리 문자열 만 추가하면됩니다 (예 :로 http://yourserver.com/foo?q=bar리디렉션) http://serverfault.com/?q=bar.
Tometzky

업데이트 해 주셔서 감사합니다. RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db오류가 발생했습니다 RewriteMap dbm type db is invalid. 그러나 내가 그것을 사용할 RewriteMap redirects txt:/etc/httpd/conf/redirects.txt때 효과가있었습니다. 나는 여전히 일반 텍스트 대신 설명 된 것처럼 해시 된 방식으로 가고 싶습니다. 그러나 dbm 오류에 대해 많이 찾을 수 없었습니다. 당신의 도움을 주셔서 감사합니다.
ucker August

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.