HTTP 301
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
HTTP 301은 웹 페이지의 URL이 영구적으로 변경되었음을 나타내는 HTTP 상태 코드이다. 주로 웹사이트 구조 변경, 도메인 변경, 콘텐츠 통합 등에 사용되며, 검색 엔진은 301 리다이렉트를 통해 이전 URL의 SEO 가치를 새 URL로 이전한다. 301 외에도 임시 리다이렉션을 나타내는 302, 307, 303 등의 상태 코드가 존재한다. 리다이렉트는 .htaccess 파일, 펄, PHP, Nginx, Express.js 등 다양한 방법으로 구현할 수 있으며, 브라우저 캐싱, 서버 측 처리, Location 헤더, SEO 영향, 다중 리다이렉트 방지 등 구현 시 주의해야 할 사항들이 있다.
더 읽어볼만한 페이지
HTTP 301 | |
---|---|
HTTP 상태 코드 | |
종류 | HTTP 응답 상태 코드 |
상태 코드 | 301 |
설명 | Moved Permanently (영구 이동) |
공식적인 RFC | |
RFC | RFC 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
phpheader("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
javascriptapp.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. 흔한 실수
참조
[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