맨위로가기

HTTP 301

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

HTTP 301은 웹 페이지의 URL이 영구적으로 변경되었음을 나타내는 HTTP 상태 코드이다. 주로 웹사이트 구조 변경, 도메인 변경, 콘텐츠 통합 등에 사용되며, 검색 엔진은 301 리다이렉트를 통해 이전 URL의 SEO 가치를 새 URL로 이전한다. 301 외에도 임시 리다이렉션을 나타내는 302, 307, 303 등의 상태 코드가 존재한다. 리다이렉트는 .htaccess 파일, 펄, PHP, Nginx, Express.js 등 다양한 방법으로 구현할 수 있으며, 브라우저 캐싱, 서버 측 처리, Location 헤더, SEO 영향, 다중 리다이렉트 방지 등 구현 시 주의해야 할 사항들이 있다.

더 읽어볼만한 페이지

  • HTTP 상태 코드 - HTTP 302
    요청한 리소스가 일시적으로 다른 위치로 이동되었음을 나타내는 HTTP 응답 코드 302는 서버가 제공하는 `Location` 헤더의 URL로 클라이언트를 리디렉션시킨다.
  • HTTP 상태 코드 - HTTP 403
    서버가 요청을 이해했으나 클라이언트에게 권한이 없어 발생하는 HTTP 403 오류는, 인증된 계정의 권한 부족, IP 제한, 서버 구성, 방화벽 차단 등으로 인해 발생하며, HTTP 401 오류와 구별된다.
HTTP 301
HTTP 상태 코드
종류HTTP 응답 상태 코드
상태 코드301
설명Moved Permanently (영구 이동)
공식적인 RFC
RFCRFC 2616
일반 정보
의미요청한 페이지가 새로운 URL로 영구적으로 이동했음을 나타냄.
동작브라우저는 자동으로 새 URL로 리디렉션함.
검색 엔진은 새 URL을 색인화함.
사용 사례웹사이트 구조 변경, 도메인 변경 등.
참고
관련 상태 코드302 Found (임시 이동)
308 Permanent Redirect (영구적 리디렉션)
HTTPS 관련
중요성HTTPS로의 영구적인 이동은 보안 향상에 중요함.
웹사이트 보안사이트를 HTTPS로 보안하는 데 사용됨.
검색 엔진 최적화에 도움을 줌.

2. 리다이렉트의 종류

리다이렉트에는 웹 페이지의 URL이 영구적으로 변경되었음을 의미하는 영구 리다이렉트와 임시적으로 변경되었음을 의미하는 임시 리다이렉트가 있다.

2. 1. 영구 리다이렉트 (301 Moved Permanently)

301 Moved Permanently는 웹 페이지의 URL이 영구적으로 변경되었음을 의미한다. 주로 웹사이트 구조 개편, 도메인 변경, 콘텐츠 통합 등의 상황에서 사용된다.

HTTP 1.1 301 응답의 예시는 다음과 같다.
클라이언트 요청:


GET /index.php HTTP/1.1

Host: www.example.org


서버 응답:


HTTP/1.1 301 Moved Permanently

Location: http://www.example.org/index.asp



.htaccess 파일을 사용하여 URL 리다이렉트를 할 수 있다. 다음은 안전하지 않은 URL을 안전한 주소로, www 없이 리다이렉트하는 예시이다.



RewriteEngine On

RewriteCond %{HTTPS} off

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} on

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteRule ^(.*)$ https://example.com/$1 [R,L]



CGI.pm을 사용한 예시는 다음과 같다.



print redirect("https://example.com/newpage.html");



PHP를 사용한 리다이렉트 예시는 다음과 같다.



header("Location: https://example.com/newpage.html", true, 301);

exit;



Nginx 구성 예시는 다음과 같다.



location /old/url/ {

return 301 /new/url/;

}



Express.js를 사용한 리다이렉트 예시는 다음과 같다.



app.all("/old/url", (req, res) => {

res.redirect(301, "/new/url");

});



빙과 구글은 페이지의 URL이 영구적으로 변경되고 조만간 다시 변경될 예정이 아닌 경우, 검색 엔진 결과에 표시되는 페이지의 URL을 변경하기 위해 301 리디렉션을 사용할 것을 권장한다.[2][3]

301 리다이렉트를 사용하면 다음과 같은 특징이 있다.

  • '''링크 가치 이전''': 검색 엔진은 일반적으로 301 리디렉션에 대해 소스 URL에서 대상 URL로 링크 가치(또는 "링크 주스")의 대부분을 이전한다.[6]
  • '''색인 지연''': 검색 엔진이 리디렉션을 인식하고 그에 따라 색인을 업데이트하는 데 지연이 있을 수 있다.

2. 2. 임시 리다이렉트 (302 Found, 307 Temporary Redirect)


  • '''302 찾음'''(Found): 301과 달리 302 상태 코드는 임시 리디렉션을 나타낸다. 검색 엔진은 SEO 값을 새 URL로 전달하지 않을 수 있다.[5]
  • '''307 임시 리디렉션'''(Temporary Redirect): 302와 유사하지만 리디렉션된 요청이 이루어질 때 메서드와 본문이 변경되지 않음을 보장한다.
  • '''303 기타 보기'''(See Other): POST 또는 기타 비-멱등 요청 메서드의 결과가 GET을 사용하여 검색해야 하는 리소스일 때 사용된다.

3. 리다이렉트 구현 방법

HTTP 301 리다이렉트는 다양한 방법으로 구현할 수 있다. 예를 들어 클라이언트가 `/index.php`에 GET 요청을 보내면, 서버는 301 Moved Permanently 응답과 함께 `Location` 헤더에 새 URL인 `http://www.example.org/index.asp`를 지정하여 응답한다.[1]

```text

클라이언트 요청:

GET /index.php HTTP/1.1

Host: www.example.org

서버 응답:

HTTP/1.1 301 Moved Permanently

Location: http://www.example.org/index.asp

```

.htaccess 파일, 펄, PHP, Express.js, Nginx 등 다양한 기술을 사용하여 구현할 수 있다. 각 기술별 구체적인 구현 방법은 하위 섹션을 참고하면 된다.

3. 1. .htaccess 파일 (Apache)

.htaccess 파일을 사용하여, 안전하지 않은 URL을 www 없이 안전한 주소로 리다이렉트 처리를 할 수 있다. 다음은 그 예시이다.[4]

```apache

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} on

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

```

분산된 .htaccess 파일을 사용하여 존재하지 않는 파일 또는 디렉터리 문제를 해결할 수 있다.

```apache

Redirect 301 /calendar.html /Calendar/

Redirect 301 /not_found.html /

```

'''아파치(Apache)'''는 301 리다이렉션을 처리하기 위해 mod_alias와 mod_rewrite를 가지고 있다. 두 가지를 모두 사용하는 것은 모듈이 다른 모듈 규칙을 존중하지 않기 때문에 예측할 수 없는 결과를 초래하는 경우가 많다.[4]

3. 2. 프로그래밍 언어

펄, PHP, Express.js 등 다양한 프로그래밍 언어를 사용하여 리다이렉트를 구현할 수 있다.[1] 각 언어에서 제공하는 리다이렉트 함수 또는 메서드를 사용한다.

3. 2. 1. 펄 (CGI.pm)

펄의 CGI.pm 모듈을 사용하여 리다이렉트를 수행하는 예시는 다음과 같다.[1]

```perl

print redirect("https://example.com/newpage.html");

```

`redirect` 함수는 리다이렉트를 수행한다.[1]

3. 2. 2. PHP

php


header("Location: https://example.com/newpage.html", true, 301);

exit;

?>

```

`header` 함수를 사용하여 HTTP 헤더에 `Location` 필드를 추가하여 리다이렉트를 수행한다. 이 코드는 사용자를 `https://example.com/newpage.html`로 영구적으로(301 Moved Permanently) 리다이렉트한다.[1]

3. 2. 3. Express.js

javascript

app.all("/old/url", (req, res) => {

res.redirect(301, "/new/url");

});

```

Express.js를 사용하여 리다이렉트를 수행하는 예시이다. `res.redirect` 메서드를 사용하여 301 리다이렉트를 수행한다.[1]

3. 3. Nginx 설정

Nginx 웹 서버의 설정 파일에서 `return` 지시자를 사용하여 리다이렉트를 설정할 수 있다. 다음은 설정 예시이다.[1]

```nginx

location /old/url/ {

return 301 /new/url/;

}

3. 4. HTML (meta refresh)

HTML 문서의 `` 섹션에 `<meta http-equiv="refresh">` 태그를 사용하여 리다이렉트를 수행할 수 있다. 그러나 검색 엔진 최적화(SEO) 측면에서는 권장되지 않는 방법이다.[1]

```html



```

위 코드는 사용자를 즉시 홈페이지(`/`)로 리다이렉트한다.

4. 리다이렉트 사용 시 주의사항

HTTP 301 상태 코드는 개발자가 리디렉션을 구현하고 관리할 때 알아야 할 몇 가지 기술적 뉘앙스가 있다.[1]

4. 1. 브라우저 처리

웹 브라우저는 301 리다이렉션을 캐싱한다. 사용자가 301 리다이렉션을 만나면, 브라우저는 서버에 접속하지 않고도 자동으로 해당 URL에 대한 후속 요청을 새 URL로 리다이렉션한다.[1] 브라우저는 301 리다이렉션을 만난 후 북마크를 새 URL로 업데이트할 수 있다.[2]

4. 2. 서버 측 처리

아파치는 301 리다이렉션을 처리하기 위해 `mod_alias`와 `mod_rewrite` 모듈을 가지고 있다. 두 가지를 모두 사용하는 것은 모듈이 다른 모듈 규칙을 존중하지 않기 때문에 예측할 수 없는 결과를 초래하는 경우가 많다.[4]

4. 3. Location 헤더

301 리다이렉트가 전송될 때는 항상 Location 필드에 새 URL을 제공해야 한다. Location 헤더를 생략하면 브라우저가 혼란을 겪고 예기치 않은 동작이 발생할 수 있다.[1]

일부 브라우저에서 상대 URL을 허용할 수 있지만, Location 헤더에서 절대 URL을 사용하는 것이 표준이며 모든 사용자 에이전트에서 일관된 동작을 보장한다.[1]

4. 4. SEO 영향

빙과 구글은 페이지의 URL이 영구적으로 변경되어 조만간 다시 변경될 예정이 아닌 경우, 검색 엔진 결과에 표시되는 페이지의 URL을 변경하기 위해 301 리디렉션을 사용할 것을 권장한다.[2][3]

검색 엔진은 일반적으로 301 리디렉션에 대해 소스 URL에서 대상 URL로 링크 가치(또는 "링크 주스")의 대부분을 이전하지만,[6] 검색 엔진이 리디렉션을 인식하고 그에 따라 색인을 업데이트하는 데 지연이 있을 수 있다.

4. 5. 흔한 실수


  • '''다중 리다이렉트''': 여러 개의 301 리다이렉션을 연속해서 사용하는 경우(A에서 B로, B에서 C로) 페이지 로딩 시간이 길어지고 SEO 가치가 감소할 수 있다.
  • '''혼합 콘텐츠 문제''': HTTP에서 HTTPS로 리다이렉션할 때에는 페이지의 모든 리소스(이미지, 스크립트, 스타일시트)가 혼합 콘텐츠 경고를 방지하기 위해 HTTPS를 통해 로드되도록 해야 한다.

참조

[1] 간행물 10.3.2 301 Moved Permanently IETF 1999-06
[2] 웹사이트 Site Move Tool https://www.bing.com[...]
[3] 웹사이트 301 redirects https://support.goog[...]
[4] 문서 301 redirect for Apache .htaccess : mod_rewrite https://www.301-redi[...]
[5] 문서 SEO and HTTP status codes: A comprehensive analysis https://http-statusc[...]
[6] 문서 301 Redirects Explained: How They Impact SEO https://ahrefs.com/b[...]
[7] 웹인용 Secure your site with HTTPS https://support.goog[...] Google 2016-02-06
[8] 간행물 10.3.2 301 Moved Permanently https://tools.ietf.o[...] IETF 1999-06



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com