www 웹페이지 -> www 없는 페이지 리디렉션
<img alt="" data-original-height="1186" data-original-width="1942" height="195" src="https://blogger.googleusercontent.com/img/a/AVvXsEgu3JFY7JVt0fv1K7rA27RXa7K-8LNV0cS3CMLogN4oSGEG0Xihoz0dNmqWOt7dABHiQVH2Lf1mAbVXQmHzg9qTgvl842qYDLlRpp08RrQCsGl_pAE3bh8jlyawGH0kP79ZoZ_WFpEJh76uPDjVjmp3IBCAF2A18PatgomOZ4pIRIRfnAqqwsw10iVPjrzo" width="320" />
사용자들이 **www**로 웹페이지에 접근하려고 할 때, 이를 자동으로 **www 없는** 페이지로 리디렉션할 수 있습니다. 이를 해결하기 위한 몇 가지 방법을 소개하겠습니다. 주로 웹 서버 설정을 통해 www로 시작하는 URL을 제거할 수 있습니다.
### **1. Apache 웹 서버에서 리디렉션 설정하기**
Apache를 사용하는 경우 `.htaccess` 파일을 사용하여 **www 리디렉션**을 설정할 수 있습니다. 아래의 코드를 `.htaccess` 파일에 추가하면, 모든 www 요청을 non-www로 리디렉션할 수 있습니다.
```apache
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
```
이 코드는:
- **RewriteEngine On**: 리라이트 엔진을 활성화합니다.
- **RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]**: www로 시작하는 모든 요청을 찾습니다.
- **RewriteRule ^(.*)$ https://%1/$1 [R=301,L]**: 해당 요청을 www 없이 리디렉션합니다. `R=301`은 영구 리디렉션을 의미합니다.
### **2. Nginx 웹 서버에서 리디렉션 설정하기**
Nginx를 사용하는 경우, 서버 설정 파일에서 www 요청을 제거하는 설정을 할 수 있습니다. 아래의 코드를 `nginx.conf` 또는 관련 설정 파일에 추가하세요.
```nginx
server {
listen 80;
server_name www.yourdomain.com;
return 301 $scheme://yourdomain.com$request_uri;
}
```
이 코드는:
- **listen 80**: HTTP 포트에서 수신합니다.
- **server_name www.yourdomain.com**: www가 포함된 도메인으로 들어오는 요청을 감지합니다.
- **return 301 $scheme://yourdomain.com$request_uri**: 요청을 non-www 도메인으로 리디렉션합니다.
### **3. 클라우드플레어와 같은 CDN 사용 시 리디렉션 설정**
클라우드플레어와 같은 CDN을 사용 중이라면, 클라우드플레어의 **페이지 규칙** 기능을 사용하여 www에서 non-www로 리디렉션할 수 있습니다.
1. 클라우드플레어 대시보드에 로그인합니다.
2. 해당 도메인으로 이동합니다.
3. **"Page Rules"** 메뉴에서 새 규칙을 추가합니다.
4. `www.yourdomain.com/*`에 대해 모든 요청을 `https://yourdomain.com/$1`로 리디렉션하도록 설정합니다.
### **4. DNS 설정에서 리디렉션 설정**
DNS 제공자가 리디렉션 기능을 제공하는 경우, 이를 통해 www 도메인을 non-www 도메인으로 리디렉션할 수 있습니다. 예를 들어, GoDaddy와 같은 DNS 제공자는 www를 자동으로 non-www로 리디렉션하는 설정을 쉽게 할 수 있습니다.
### **5. React Router에서 리디렉션 설정**
만약 React 애플리케이션에서 www가 포함된 URL로 접근하는 것을 막고 싶다면, React Router에서 조건에 따라 리디렉션할 수도 있습니다. 하지만 이 방법은 사용자가 이미 페이지에 도달한 이후에만 작동하므로, 서버 측 리디렉션만큼 효율적이지는 않습니다.
```jsx
import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
function App() {
const navigate = useNavigate();
useEffect(() => {
if (window.location.hostname.startsWith('www')) {
const nonWwwUrl = window.location.href.replace('www.', '');
window.location.href = nonWwwUrl;
}
}, []);
return (
// Your app components
);
}
```
### **정리**
- **서버 레벨에서 리디렉션**: Apache, Nginx, 또는 CDN(DNS) 설정을 통해 www 도메인을 non-www 도메인으로 리디렉션하는 것이 가장 효과적이고 빠릅니다.
- **클라이언트 측 리디렉션**: React와 같은 프론트엔드에서 리디렉션을 처리할 수도 있지만, 이는 최후의 수단으로 사용하고 서버에서 먼저 리디렉션을 처리하는 것이 좋습니다.
이 방법들로 사용자가 **www**로 접근할 때, 자동으로 **non-www**로 리디렉션될 수 있도록 설정할 수 있습니다.
# 클라우드 플레어 방식
클라우드플레어에서 **Page Rules(페이지 규칙)** 기능을 사용하여 **www**에서 **non-www**로 리디렉션하는 과정을 자세히 설명해드리겠습니다. 클라우드플레어의 페이지 규칙 기능은 특정 URL 패턴에 맞는 요청을 리디렉션하거나, 캐싱 정책을 설정하는 등 다양한 규칙을 적용할 수 있는 강력한 도구입니다.
### **1. 클라우드플레어 대시보드에 로그인**
1. [Cloudflare](https://www.cloudflare.com) 웹사이트로 이동하여 로그인합니다.
2. 로그인 후, 클라우드플레어 대시보드로 들어갑니다.
### **2. 도메인 선택**
1. 로그인 후, 클라우드플레어 대시보드에서 **리디렉션을 설정할 도메인**을 선택합니다.
2. 도메인을 선택하면, 해당 도메인의 설정 페이지로 이동합니다.
### **3. Page Rules 설정으로 이동**
1. 왼쪽 메뉴에서 **"Page Rules"** (페이지 규칙) 항목을 클릭합니다. 이 항목은 도메인 설정 페이지의 여러 옵션 중 하나로 위치해 있습니다.
2. "Page Rules" 페이지로 이동하면, 페이지 하단에 **"Create Page Rule"** 버튼이 있습니다. 이 버튼을 클릭하여 새로운 페이지 규칙을 추가합니다.
### **4. Page Rule 추가 및 설정**
#### 4.1 URL 입력
1. **"If the URL matches"** 필드에 다음과 같이 **www로 시작하는 URL 패턴**을 입력합니다:
```
www.yourdomain.com/*
```
이 패턴은 www.yourdomain.com에서 시작하는 모든 페이지(URL)를 포함합니다. 예를 들어, `www.yourdomain.com/contact`와 같은 경로도 포함됩니다.
#### 4.2 리디렉션 설정
2. **"Then the settings are"** 드롭다운에서 **"Forwarding URL"** 옵션을 선택합니다. Forwarding URL 옵션을 선택하면 리디렉션과 관련된 설정이 가능합니다.
3. **"Status Code"**는 **"301 - Permanent Redirect"**로 설정합니다. 301 리디렉션은 영구 리디렉션으로, 검색 엔진에서 이 변경 사항을 반영하도록 합니다.
4. **"Destination URL"** 필드에 다음과 같이 입력합니다:
```
https://yourdomain.com/$1
```
이 URL은 `www` 없이 도메인으로 리디렉션하도록 설정합니다. `$1`은 `*`로 지정된 모든 경로를 그대로 유지하며, 이를 통해 사용자가 요청한 페이지가 그대로 유지되도록 보장합니다. 예를 들어, `www.yourdomain.com/contact`로 들어온 요청은 `yourdomain.com/contact`로 리디렉션됩니다.
#### 4.3 규칙 저장
5. 설정을 완료한 후 **"Save and Deploy"** 버튼을 클릭하여 규칙을 저장하고 활성화합니다.
### **5. Page Rule 우선순위 확인 (선택 사항)**
클라우드플레어에서는 페이지 규칙이 여러 개 있는 경우 **우선순위**가 적용됩니다. 페이지 규칙 목록에서 우선순위를 변경할 수 있습니다. **리디렉션 규칙이 가장 위에 위치**하도록 설정하여 다른 규칙보다 먼저 적용되도록 할 수 있습니다.
### **6. 테스트**
이제 설정이 완료되었으므로, www가 포함된 도메인으로 접속하여 설정이 제대로 적용되었는지 확인합니다. 예를 들어 `www.yourdomain.com` 또는 `www.yourdomain.com/contact`로 접속했을 때, 자동으로 `yourdomain.com` 또는 `yourdomain.com/contact`로 리디렉션되는지 테스트해보세요.
### **참고사항**
- **301 리디렉션**은 영구적(Permanent) 리디렉션으로, 브라우저나 검색 엔진이 리디렉션 정보를 캐시할 수 있습니다. 임시적으로 리디렉션할 경우에는 **302 리디렉션**을 사용할 수 있지만, 대부분의 경우 www를 non-www로 영구적으로 리디렉션하는 것이므로 301 리디렉션이 적합합니다.
- 클라우드플레어의 **무료 플랜**에서도 페이지 규칙은 최대 3개까지 생성할 수 있습니다. 만약 더 많은 규칙이 필요하다면 유료 플랜 업그레이드를 고려해야 합니다.
이제 클라우드플레어에서 **www**로 들어오는 모든 요청이 자동으로 **non-www**로 리디렉션될 것입니다. 이 방법으로 사용자의 오타나 잘못된 URL 입력으로 인한 접근 문제를 해결할 수 있습니다.
클라우드플레어에서 www에서 non-www로 리디렉션하는 설정은 **DNS 레코드**에서 직접적으로 하는 것이 아니라, **Page Rules(페이지 규칙)**에서 설정하는 것입니다.
# DNS 레코드 vs Page Rules
### **DNS 레코드와 Page Rules의 차이**
- **DNS 레코드**: 도메인 이름을 IP 주소로 매핑하는 시스템입니다. 예를 들어, `A 레코드`, `CNAME 레코드` 등을 사용해 도메인이 특정 서버로 연결되도록 설정합니다. DNS 레코드 자체는 리디렉션 기능을 제공하지 않습니다.
- **Page Rules(페이지 규칙)**: 클라우드플레어에서 제공하는 기능으로, 특정 URL 패턴에 따라 요청을 리디렉션하거나, 캐싱 정책 등을 설정할 수 있습니다. 리디렉션을 설정하려면 **Page Rules** 기능을 사용해야 합니다.
### **DNS 레코드에서 할 수 있는 것**
1. **CNAME 레코드 설정**: 만약 `www.yourdomain.com`이 `yourdomain.com`과 동일한 콘텐츠를 제공하도록 하고 싶다면, DNS 레코드에서 `www`를 `yourdomain.com`으로 **CNAME** 설정할 수 있습니다. 하지만, **CNAME 레코드**는 단순히 도메인을 다른 도메인으로 매핑할 뿐, 자동 리디렉션을 수행하지 않습니다. 사용자가 `www.yourdomain.com`으로 접근하면 여전히 www로 접속하게 됩니다.
예를 들어:
- `CNAME www -> yourdomain.com`
이 설정을 통해 `www.yourdomain.com`이 `yourdomain.com`을 가리키도록 할 수 있지만, 이것은 단순히 도메인 간 연결일 뿐, **리디렉션**은 아닙니다.
### **정리**
- **리디렉션을 설정**하고 싶다면, 클라우드플레어의 **Page Rules(페이지 규칙)** 기능을 사용해야 합니다. 이는 DNS 레코드에서 설정할 수 있는 기능이 아닙니다.
- DNS 레코드에서 CNAME 설정은 할 수 있지만, 사용자가 여전히 www로 접속하게 되므로 실제로 원하는 리디렉션 효과를 얻으려면 Page Rules를 사용해야 합니다.
따라서, www에서 non-www로의 리디렉션은 **클라우드플레어 대시보드 > Page Rules**에서 설정해야 합니다.
*페이지 규칙은 무료 플랜에서 세개 제한인데 나중에 지우면 다시 회복됨*
# HTTP 상태 코드 301 302 차이
**301**과 **302** 리디렉션은 모두 HTTP 상태 코드로, 사용자가 요청한 URL이 다른 URL로 리디렉션되도록 브라우저에게 지시하는 방식입니다. 하지만 두 상태 코드 사이에는 중요한 차이가 있습니다. 주로 **리디렉션의 영구성**과 **검색 엔진에 미치는 영향**에 따라 구분됩니다.
### **1. 301 리디렉션 (Permanent Redirect)**
- **의미**: 301 리디렉션은 **영구적**인 리디렉션입니다. 즉, 요청된 URL이 영구적으로 변경된 새 URL로 이동된다는 것을 의미합니다.
- **브라우저 캐싱**: 브라우저는 이 리디렉션 정보를 **캐싱**합니다. 따라서, 사용자가 다시 같은 URL에 접속하려고 할 때, 브라우저는 캐싱된 리디렉션 정보를 사용해 자동으로 새로운 URL로 접속을 시도합니다.
- **검색 엔진 처리**: 검색 엔진(예: Google)은 301 리디렉션을 보면 **영구적으로 페이지가 이동**했다고 판단하고, 이전 URL의 모든 검색 랭킹 및 권한을 새 URL로 **이전**합니다. 즉, SEO 측면에서 중요한 상태 코드입니다.
- **SEO에 미치는 영향**: 301 리디렉션은 검색 엔진에서 새로운 URL로 랭킹이 이전되므로, 기존 URL이 얻은 모든 SEO 가치를 새 URL로 이전할 수 있습니다.
### **2. 302 리디렉션 (Temporary Redirect)**
- **의미**: 302 리디렉션은 **임시적**인 리디렉션입니다. 즉, 요청된 URL이 임시적으로 다른 URL로 이동된다는 의미이며, 나중에 다시 원래 URL로 돌아갈 가능성이 있습니다.
- **브라우저 캐싱**: 브라우저는 302 리디렉션을 캐싱하지 않거나 제한적으로 캐싱합니다. 사용자가 다시 해당 URL에 접속하면, 브라우저는 서버에 다시 요청을 보내어 리디렉션이 여전히 유효한지 확인합니다.
- **검색 엔진 처리**: 검색 엔진은 302 리디렉션을 **임시적**이라고 간주합니다. 즉, 기존 URL이 여전히 유효한 것으로 간주하고, 원래 URL의 검색 랭킹을 유지합니다. SEO 가치는 일반적으로 원래 URL에 남아 있습니다.
- **SEO에 미치는 영향**: 302 리디렉션은 기존 URL이 여전히 유효하다고 판단되므로, 검색 엔진은 기존 URL의 랭킹을 유지하려고 합니다. 따라서, 영구적으로 페이지를 이동시키는 것이 아니라면 302 리디렉션을 사용해야 합니다.
### **301과 302의 주요 차이점**
1. **영구성**:
- **301**: 영구적으로 페이지가 이동되었음을 의미합니다.
- **302**: 임시적으로 페이지가 이동되었음을 의미합니다.
2. **검색 엔진 처리**:
- **301**: SEO 가치를 새 URL로 이전하며, 기존 URL은 검색 엔진에서 삭제될 수 있습니다.
- **302**: SEO 가치는 기존 URL에 남아 있으며, 새 URL은 검색 엔진에서 영구적으로 인덱싱되지 않습니다.
3. **브라우저 캐싱**:
- **301**: 브라우저가 리디렉션을 캐싱합니다.
- **302**: 브라우저는 리디렉션을 캐싱하지 않거나 임시적으로만 캐싱합니다.
### **사용 사례**
- **301 리디렉션 사용 시**:
- 도메인을 영구적으로 변경할 때 (예: 도메인 A에서 도메인 B로 변경).
- 페이지의 URL 구조를 영구적으로 변경할 때 (예: `example.com/old-page`를 `example.com/new-page`로 변경).
- www에서 non-www로 리디렉션할 때와 같은 경우에 사용됩니다.
- **302 리디렉션 사용 시**:
- 웹사이트 유지보수 또는 일시적인 페이지 이동이 필요한 경우 (예: 이벤트 기간 동안 특정 페이지로 임시적으로 리디렉션).
- A/B 테스트를 위해 사용자가 임시적으로 다른 페이지를 보도록 할 때.
### **결론**
- **301 리디렉션**은 영구적이고 SEO에 영향을 미치며, 기존 URL의 모든 가치를 새 URL로 이전하고자 할 때 사용됩니다.
- **302 리디렉션**은 임시적이고, 기존 URL을 유지하면서 일시적으로 다른 페이지로 이동할 때 사용됩니다.
따라서, 웹사이트의 구조가 영구적으로 변경되었거나 www에서 non-www로의 리디렉션처럼 지속적으로 유지해야 하는 경우 **301 리디렉션**을 사용하는 것이 적합합니다.
# **클라우드플레어에서 페이지 규칙으로 리디렉션 설정 시 "Destination URL"의 `$1` 의미**
클라우드플레어에서 페이지 규칙(Page Rules)을 설정할 때, 리디렉션할 목적지 URL을 설정하는 **"Destination URL"** 필드에서 `$1`은 **정규식(정규 표현식) 패턴 매칭**에서 사용하는 **캡처 그룹**을 의미합니다.
#### **1. 리디렉션 기본 설정**
예를 들어, www 도메인(`www.yourdomain.com`)에서 www 없는 도메인(`yourdomain.com`)으로 리디렉션하려고 할 때, 다음과 같은 설정을 할 수 있습니다:
- **원본 URL 패턴**: `www.yourdomain.com/*`
- 이 패턴은 `www.yourdomain.com`으로 시작하는 모든 요청을 포착합니다.
- 여기서 `*`는 와일드카드 문자로, 임의의 문자열을 의미합니다. 예를 들어, `/contact`, `/about`, `/product/123` 등의 경로가 포함됩니다.
- **목적지 URL(Destination URL)**: `https://yourdomain.com/$1`
- 이 부분에서 `https://yourdomain.com/`은 리디렉션될 **기본 도메인**이고, `$1`은 `*`로 캡처된 경로를 그대로 유지합니다.
- 이 설정은 **`www.yourdomain.com`에서 `yourdomain.com`으로 리디렉션하되, 요청된 경로를 유지**하겠다는 뜻입니다.
#### **2. `$1`의 의미**
- **`$1`**은 정규식에서 **첫 번째 캡처 그룹**을 의미합니다. 여기서 첫 번째 캡처 그룹은 `*`로 지정된 경로 부분입니다. 클라우드플레어에서 `*`로 지정된 부분은 URL의 나머지 경로를 캡처하는 역할을 하며, 이 캡처된 경로가 `$1`에 저장됩니다.
- 예를 들어:
- `www.yourdomain.com/contact`로 들어온 요청은, `*` 부분이 `/contact`를 캡처합니다. 따라서, 리디렉션 설정에서 `$1`이 `/contact`로 대체됩니다.
- 최종적으로 사용자가 이동하게 될 URL은 `https://yourdomain.com/contact`이 됩니다.
#### **3. 실전 예시**
- **설정된 리디렉션**:
- 원본 URL 패턴: `www.yourdomain.com/*`
- 목적지 URL: `https://yourdomain.com/$1`
- **사용자 요청이 들어왔을 때**:
1. 사용자가 `www.yourdomain.com/contact`로 접근했을 경우:
- `*`는 `/contact`를 캡처합니다.
- 클라우드플레어는 `$1`을 `/contact`로 대체하여, 사용자를 `https://yourdomain.com/contact`로 리디렉션합니다.
2. 사용자가 `www.yourdomain.com/blog/article`로 접근했을 경우:
- `*`는 `/blog/article`을 캡처합니다.
- 클라우드플레어는 `$1`을 `/blog/article`로 대체하여, 사용자를 `https://yourdomain.com/blog/article`로 리디렉션합니다.
#### **4. `$1`, `$2`, `$3`... 여러 캡처 그룹**
정규식에서는 `$1`뿐만 아니라 `$2`, `$3` 등 여러 개의 캡처 그룹을 사용할 수 있습니다. 하지만 클라우드플레어의 기본적인 리디렉션 설정에서는 주로 하나의 `*`만 사용되므로 `$1`만 사용됩니다. 만약 URL 패턴에서 여러 개의 와일드카드를 사용했다면, 각각의 와일드카드에 해당하는 캡처 그룹이 `$2`, `$3`와 같이 사용됩니다.
#### **5. 요약**
- **`$1`**은 정규식의 첫 번째 캡처 그룹으로, 클라우드플레어에서 `*`로 지정된 경로 부분을 의미합니다.
- 이 기능을 사용하면 **사용자가 요청한 경로를 유지하면서** 리디렉션할 수 있습니다. 즉, 도메인만 변경하고, 경로는 그대로 유지됩니다.
- 사용자가 `www.yourdomain.com/`으로 시작하는 어떤 경로로 접속하더라도, 동일한 경로로 `yourdomain.com/`으로 리디렉션됩니다.
이를 통해 www를 제거하면서도 특정 경로에 대한 사용자 경험이 유지되도록 할 수 있습니다.
---
등록하자마자 바로 작동하는 것을 확인했다 클라우드 플레어 만세다.
댓글
댓글 쓰기