웹사이트 검색

Apache로 임시 및 영구 리디렉션을 만드는 방법


소개

HTTP 리디렉션은 하나의 도메인이나 주소를 다른 도메인이나 주소로 지정하는 방법입니다. 몇 가지 다른 종류의 리디렉션이 있으며 각 리디렉션은 클라이언트 브라우저에 대해 다른 의미를 갖습니다. 가장 일반적인 두 가지 유형은 임시 리디렉션과 영구 리디렉션입니다.

임시 리디렉션(응답 상태 코드 302 찾음)은 URL을 일시적으로 다른 위치에서 제공해야 하는 경우에 유용합니다. 예를 들어, 사이트 유지 관리를 수행하는 경우 도메인에서 설명 페이지로의 임시 리디렉션을 사용하여 방문자에게 곧 돌아올 것임을 알릴 수 있습니다.

반면에 영구 리디렉션(응답 상태 코드 301이 영구적으로 이동됨)은 이전 주소를 완전히 잊어버리고 더 이상 액세스를 시도하지 않아야 함을 브라우저에 알립니다. 이는 도메인 이름을 변경하는 경우와 같이 콘텐츠가 새 위치로 영구적으로 이동된 경우에 유용합니다.

서버 구성 파일의 가상 호스트 항목에 다음과 같은 줄을 추가하여 Apache에서 임시 리디렉션을 만들 수 있습니다.

Redirect /oldlocation http://www.newdomain.com/newlocation

마찬가지로 영구 리디렉션을 위해 다음과 같은 줄을 사용합니다.

Redirect permanent /oldlocation http://www.newdomain.com/newlocation

이 가이드는 Apache에서 각 종류의 리디렉션을 구현하는 방법에 대한 자세한 설명을 다루고 특정 사용 사례에 대한 몇 가지 예를 살펴봅니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • Apache 2가 설치되고 가상 호스트로 웹 사이트를 제공하도록 설정된 서버 1대. 데비안 7에서 다음을 수행할 수 있습니다.

솔루션 개요

Apache에서는 새로 Apache를 설치할 때 기본적으로 활성화되는 mod_alias 모듈에 포함된 Redirect 지시문을 사용하여 간단한 단일 페이지 리디렉션을 수행할 수 있습니다. 이 지시문은 이전 URL과 새 URL의 두 개 이상의 인수를 사용하며 임시 및 영구 리디렉션을 만드는 데 사용할 수 있습니다.

가장 간단한 형태로 서버 구성에서 다음 줄을 사용하여 임시 리디렉션을 수행할 수 있습니다.

<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect / http://www.domain2.com
</VirtualHost>

<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
</VirtualHost>

이 리디렉션은 www.domain1.com에 대한 모든 요청을 www.domain2.com으로 보내도록 브라우저에 지시합니다. 그러나이 솔루션은 전체 사이트가 아닌 단일 홈 페이지에서만 작동합니다.

둘 이상의 페이지를 리디렉션하려면 정규식을 사용하여 단일 파일이 아닌 전체 디렉터리를 지정하는 RedirectMatch 지시문을 사용할 수 있습니다. RedirectMatch는 괄호 안의 정규식 패턴과 일치한 다음 $1 식을 사용하여 리디렉션 대상에서 일치하는 텍스트를 참조합니다. 여기서 1은 일치하는 첫 번째 그룹입니다. 텍스트. 보다 복잡한 예에서는 후속 일치 그룹에 번호가 순차적으로 부여됩니다.

예를 들어 www.domain1.com 내의 모든 페이지를 www.domain2.com으로 일시적으로 리디렉션하려는 경우 다음을 사용할 수 있습니다.

<VirtualHost *:80>
	ServerName www.domain1.com
	RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>

<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
</VirtualHost>

기본적으로 RedirectRedirectMatch 지시문은 모두 임시 리디렉션을 설정합니다. 영구적인 리디렉션을 생성하려면 다음 지시문 중 하나에 permanent를 추가하면 됩니다.

Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1

mod_rewrite 모듈을 사용하여 보다 유연하고 강력한 리디렉션을 생성할 수도 있습니다. 이것은 이 문서의 범위를 벗어나지만 Apache용 mod_rewrite를 설정하는 방법에서 mod_rewrite로 시작할 수 있습니다.

몇 가지 구체적인 예를 살펴보겠습니다.

예 1 - 다른 도메인으로 이동

웹사이트를 구축했고 도메인을 새 주소로 변경하려는 경우 이전 도메인을 그냥 버리지 않는 것이 가장 좋습니다. 새 위치를 찾는 방법에 대한 브라우저에 대한 지침 없이 콘텐츠가 사라지면 인터넷의 다른 페이지에 있는 사이트에 대한 북마크 및 링크가 끊어집니다. 리디렉션하지 않고 도메인을 변경하면 사이트에서 이전 방문자의 트래픽이 손실됩니다.

이 예에서는 domain1.com이라는 이전 도메인에서 domain2.com이라는 새 도메인으로의 리디렉션을 구성합니다. 이전 도메인이 중단되고 이제부터 모든 트래픽이 새 도메인으로 이동해야 하므로 여기에서 영구 리디렉션을 사용합니다.

다음과 같이 Apache에 이미 구성된 domain1.com이라는 단일 도메인에서 제공되도록 웹사이트를 구성했다고 가정해 보겠습니다.

<VirtualHost *:80>
    ServerAdmin admin@domain1.com
    ServerName domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /var/www/domain1.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

또한 domain2.com에서 웹사이트의 향후 버전을 이미 제공하고 있다고 가정합니다.

<VirtualHost *:80>
    ServerAdmin admin@domain2.com
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /var/www/domain2.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

domain1.com 가상 호스트 구성 파일을 변경하여 domain2.com에 대한 영구 리디렉션을 추가해 보겠습니다.

<VirtualHost *:80>
    ServerAdmin admin@domain1.com
    ServerName domain1.com
    ServerAlias www.domain1.com    
    DocumentRoot /var/www/domain1.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RedirectMatch permanent ^/(.*)$ http://domain2.com/$1
</VirtualHost>

RedirectMatch 지시문을 사용하여 앞서 언급한 리디렉션을 추가했습니다. 단순한 리디렉션 대신 RedirectMatch를 사용하여 홈 페이지뿐만 아니라 모든 웹사이트 페이지가 영향을 받도록 합니다. ^/(.*)$ 정규식은 URL에서 / 뒤의 모든 항목과 일치합니다. 예를 들어 http://domain1.com/index.htmlhttp://domain2.com/index.html<로 리디렉션됩니다. /마크>. 영구적인 리디렉션을 달성하려면 RedirectMatch 지시문 뒤에 permanent를 추가하기만 하면 됩니다.

참고: systemctl restart apache2를 사용하여 구성을 변경한 후에는 Apache를 다시 시작해야 합니다.

예 2 - 단일 페이지 이름 변경에도 불구하고 지속적인 경험 만들기

경우에 따라 이미 게시되어 사이트에서 트래픽을 받은 개별 페이지의 이름을 변경해야 합니다. 이름만 변경하면 원래 URL에 액세스하려는 방문자에게 404 Not Found 오류가 발생하지만 리디렉션을 사용하면 이를 방지할 수 있습니다. 이렇게 하면 이전 페이지를 북마크에 추가했거나 검색 엔진의 오래된 링크를 통해 찾은 사람들이 여전히 올바른 페이지에 도달할 수 있습니다.

웹사이트에 각각 products.htmlservices.html이라는 제품 및 서비스에 대한 별도의 두 페이지가 있다고 가정해 보겠습니다. 이제 이 두 페이지를 대신 offers.html이라는 단일 제안 페이지로 교체하기로 결정했습니다. products.htmlservices.html에 대한 간단한 리디렉션을 offers.html로 구성합니다.

귀하의 웹사이트가 다음과 같이 구성되어 있다고 가정합니다.

<VirtualHost *:80>
	ServerName example.com
	. . .
</VirtualHost>

리디렉션 구성은 두 개의 Redirect 지시문을 사용하는 것처럼 간단합니다.

<VirtualHost *:80>
	ServerName example.com
    
    Redirect permanent /products.html /offer.html
    Redirect permanent /services.html /offer.html
	. . .
</VirtualHost>

Redirect 지시문은 리디렉션해야 하는 원래 주소와 새 페이지의 대상 주소를 허용합니다. 여기서의 변경은 일시적인 변경이 아니므로 지시문에서도 permanent를 사용했습니다. 방문자가 사이트 콘텐츠를 이동할 때 불필요한 찾을 수 없음 오류가 표시되지 않도록 원하는 만큼 리디렉션을 사용할 수 있습니다.

결론

이제 요청을 새 위치로 리디렉션하는 방법을 알고 있습니다. 임시 리디렉션을 부적절하게 사용하면 검색 순위가 손상될 수 있으므로 올바른 리디렉션 유형을 사용해야 합니다.

보안 SSL 연결(예: http 대신 https 사용)을 강제하고 모든 방문자가 www. 웹사이트의 접두사 주소입니다.

리디렉션을 올바르게 사용하면 필요에 따라 사이트 구조를 수정하면서 현재 웹 존재를 활용할 수 있습니다. 방문자를 리디렉션할 수 있는 방법에 대해 자세히 알아보려면 Apache 공식 문서의 mod_rewrite 섹션에 주제에 대한 훌륭한 문서가 있습니다.