aboutfishing.kr → www.aboutfishing.kr 리다이렉트 요청서

작성 2026-09-08 요청 서현일 (CPO / 플랫폼개발팀) 수신 인프라 담당 적용 목표 2026-09-09(수) 오전, www 전환과 동시

9/9 오전에 서비스 주소를 www.aboutfishing.kr 하나로 통합합니다. 지금 aboutfishing.kr(www 없는 주소)로 들어오는 유입을 www로 넘겨야 하는데, 전달받은 index.html은 booking.aboutfishing.kr로 보내도록 되어 있습니다. 아래 순서대로 봐주시면 됩니다.

0먼저 확인이 필요한 것 — 실제로 서빙되는 배포물이 무엇인가

전달받은 파일과 실제 응답이 다릅니다. 전달받은 index.html<meta http-equiv="refresh">로 booking으로 보내는 한 장짜리 파일인데, 9/8 현재 https://aboutfishing.kr/을 실제로 열면 refresh 태그가 없는 예전 랜딩 페이지가 응답합니다. apex에 배포물이 두 벌 있거나, 전달받은 파일이 지금 서빙되지 않는 구버전입니다. 어느 vhost·버킷·배포가 apex를 서빙하는지부터 확정해야 이후 작업이 의미가 있습니다.

근거는 네이버 사이트 검증 코드가 셋 다 다르다는 점입니다. 같은 사이트라면 이렇게 갈릴 수 없습니다.

위치naver-site-verification 값canonicalog:image
실제 응답 (aboutfishing.kr)58e0552c06b3…c2a1bhttps://aboutfishing.kr//images/logo_og.png
전달받은 index.html3d586b009b13…1d244f없음image.aboutfishing.kr/static/favicon/og-image.jpg
www.aboutfishing.kr396e6d3a52e2…f65f0941https://www.aboutfishing.kr//og/og-default.jpg

확인 부탁드릴 것 두 가지입니다.

  1. apex(aboutfishing.kr)를 서빙하는 배포 경로와, 전달받은 index.html이 그중 어디에 있는 파일인지
  2. apex에 /images/, /static/ 같은 하위 경로 자산이 실제로 붙어 있는지 (있으면 리다이렉트 규칙에서 다뤄야 합니다)

1최종 목표

항목요구사항
대상aboutfishing.kr 및 www가 아닌 모든 호스트 → https://www.aboutfishing.kr
상태코드301 Permanent. 302는 검색엔진이 주소 이전으로 취급하지 않으므로 쓰지 않습니다
보존경로 + 쿼리스트링 + 해시를 그대로 붙여서 넘깁니다. 루트로 몰지 않습니다
프로토콜http://로 들어온 것도 같은 규칙으로 https://www…까지 한 번에
예외 경로/.well-known/ 이하는 리다이렉트하지 않고 apex에서 그대로 응답 (인증서 갱신, 앱 링크 검증 파일)
적용 시점9/9(수) 오전 www 전환과 동시. 그 전에 걸면 아직 노출되면 안 되는 화면이 색인됩니다

쿼리 보존이 왜 중요한가

루트로 몰아버리면 아래가 전부 유실됩니다.

21순위 — 서버·엣지에서 301 (권장)

HTML 파일을 고치는 것보다 이쪽이 맞습니다. meta refresh나 JS 리다이렉트가 못 넘기는 것이 세 가지 있습니다.

못 넘기는 것결과
검색 신호apex가 색인에서 안 빠지고 www와 중복 색인 상태가 유지됩니다. 9/8 현재 두 주소 모두 index, follow입니다
공유 미리보기카카오톡·네이버·슬랙 크롤러는 리다이렉트 전 페이지의 og를 읽습니다. apex 카드가 그대로 나갑니다
광고 심사네이버 검색광고는 연결 URL이 리다이렉트 페이지면 재검수 대상이 됩니다

Cloudflare를 쓰는 경우 — Redirect Rules

대시보드에서 해당 존 → RulesRedirect RulesCreate rule.

[When incoming requests match]
  Custom filter expression
  (http.host eq "aboutfishing.kr") and not starts_with(http.request.uri.path, "/.well-known/")

[Then]
  Type            : Dynamic
  Expression      : concat("https://www.aboutfishing.kr", http.request.uri.path,
                           http.request.uri.query ne "" ? concat("?", http.request.uri.query) : "")
  Status code     : 301
  Preserve query string : (Dynamic 식에서 직접 붙이므로 체크 해제)

Nginx인 경우

server {
    listen 443 ssl http2;
    server_name aboutfishing.kr;

    # 인증서 갱신·앱 링크 검증 파일은 리다이렉트하지 않는다
    location ^~ /.well-known/ {
        root /var/www/apex;
        try_files $uri =404;
    }

    location / {
        return 301 https://www.aboutfishing.kr$request_uri;
    }
}

server {
    listen 80;
    server_name aboutfishing.kr www.aboutfishing.kr;
    location ^~ /.well-known/ { root /var/www/apex; try_files $uri =404; }
    location / { return 301 https://www.aboutfishing.kr$request_uri; }
}

$request_uri는 경로와 쿼리를 모두 포함합니다. 뒤에 /$uri를 덧붙이면 안 됩니다.

Apache인 경우

RewriteEngine On
RewriteCond %{HTTP_HOST} ^aboutfishing\.kr$ [NC]
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteRule ^(.*)$ https://www.aboutfishing.kr/$1 [R=301,L,QSA]

32순위 — 301이 9/9 전에 안 될 때의 임시 파일

서버 설정을 못 건드리는 상황이면 apex 루트의 index.html을 아래로 교체합니다. 어디까지나 임시이고, 301로 옮길 때까지만 씁니다.

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황</title>
    <link rel="canonical" href="https://www.aboutfishing.kr/">
    <meta name="apple-mobile-web-app-title" content="어바웃피싱 – about fishing">
    <meta name="robots" content="index, follow, max-image-preview:large">
    <meta name="description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
    <meta property="og:type" content="website">
    <meta property="og:site_name" content="어바웃피싱">
    <meta property="og:locale" content="ko_KR">
    <meta property="og:title" content="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황">
    <meta property="og:url" content="https://www.aboutfishing.kr/">
    <meta property="og:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
    <meta property="og:description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황">
    <meta name="twitter:url" content="https://www.aboutfishing.kr/">
    <meta name="twitter:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
    <meta name="twitter:description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
    <meta name="naver-site-verification" content="58e0552c06b379fb692bfaf39094e438919c2a1b">
    <script>
      (function () {
        location.replace('https://www.aboutfishing.kr'
          + location.pathname + location.search + location.hash);
      })();
    </script>
    <noscript><meta http-equiv="refresh" content="0;URL='https://www.aboutfishing.kr/'"></noscript>
  </head>
  <body>
    <p>어바웃피싱 주소가 <a href="https://www.aboutfishing.kr/">www.aboutfishing.kr</a>로 바뀌었습니다.
    자동으로 이동하지 않으면 링크를 눌러주세요.</p>
  </body>
</html>
크롤러가 og를 읽을 수 있도록 meta refreshnoscript로 내리고 실제 이동은 JS가 처리합니다. 색인은 canonical이 www를 가리켜 통합됩니다. naver-site-verification 값은 현재 apex가 실제로 응답하는 코드(58e0552c…)를 그대로 유지했습니다. 0번에서 서빙 배포물이 다른 것으로 확인되면 그쪽 코드로 맞춰주세요.

전달받은 index.html 대비 고친 항목

「고칠 것」 칸은 파일에 그대로 넣는 값입니다.

#지금 값고칠 값 (그대로 입력)이유
1 <meta http-equiv="refresh" content="0;URL='https://booking.aboutfishing.kr/'" /> <noscript><meta http-equiv="refresh" content="0;URL='https://www.aboutfishing.kr/'"></noscript> 이대로 두면 9/9 이후에도 apex 유입이 전부 https://booking.aboutfishing.kr/ 로 갑니다
2 목적지가 https://booking.aboutfishing.kr/ 루트로 고정 location.replace('https://www.aboutfishing.kr' + location.pathname + location.search + location.hash); https://aboutfishing.kr/?event=kntohttps://www.aboutfishing.kr/?event=knto 로 가야 합니다. utm·gclid도 같습니다
3 canonical 태그 없음 <link rel="canonical" href="https://www.aboutfishing.kr/"> https://aboutfishing.kr/https://www.aboutfishing.kr/ 의 동시 색인 해소
4 <meta property="og:url" content="https://aboutfishing.kr">
<meta name="twitter:url" content="https://aboutfishing.kr">
<meta property="og:url" content="https://www.aboutfishing.kr/">
<meta name="twitter:url" content="https://www.aboutfishing.kr/">
공유 카드가 https://aboutfishing.kr 를 가리킵니다
5 description·og:description·twitter:title·twitter:descriptioncontent 가 빈 문자열 content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요."
(twitter:titlecontent="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황")
카카오톡 공유 시 설명이 빈 칸으로 나갑니다. 값은 https://www.aboutfishing.kr/ 에 현재 들어 있는 문구를 그대로 가져왔습니다
6 <meta property="og:image" content="https://image.aboutfishing.kr/static/favicon/og-image.jpg">
<meta name="twitter:image" content="https://image.aboutfishing.kr/static/favicon/og-image.jpg">
<meta property="og:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
<meta name="twitter:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
https://www.aboutfishing.kr/ 가 쓰는 이미지와 다릅니다
7 <meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary_large_image"> https://www.aboutfishing.kr/ 와 불일치
8 og:type·og:site_name·og:locale 태그 자체가 없음 <meta property="og:type" content="website">
<meta property="og:site_name" content="어바웃피싱">
<meta property="og:locale" content="ko_KR">
https://www.aboutfishing.kr/ 에는 세 개 다 있습니다
9 <html lang="en"> <html lang="ko">
10 <meta name="robots" content="index,nofollow"/> <meta name="robots" content="index, follow, max-image-preview:large"> nofollow 는 의미가 없고 canonical 통합을 방해합니다. 값은 https://www.aboutfishing.kr/ 과 동일하게 맞췄습니다
11 <body> 자체가 없음 (</head> 다음 바로 </html>) <body><p>어바웃피싱 주소가 <a href="https://www.aboutfishing.kr/">www.aboutfishing.kr</a>로 바뀌었습니다. 자동으로 이동하지 않으면 링크를 눌러주세요.</p></body> refresh가 막히는 인앱 브라우저에서 백지로 뜹니다
12 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 줄 삭제 지금은 무의미합니다
13 <meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width, initial-scale=1">
14 <meta name="naver-site-verification" content="3d586b009b13e0ef4d5ab528530ea96fcd1d244f" /> <meta name="naver-site-verification" content="58e0552c06b379fb692bfaf39094e438919c2a1b"> 9/8 현재 https://aboutfishing.kr/ 가 실제로 응답하는 값은 58e0552c… 입니다. 0번에서 서빙 배포물이 다른 것으로 확인되면 그쪽 값으로 맞춰주세요
15 <title> 태그 없음 <title>어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황</title> 공유 카드와 검색 결과의 제목이 비어 있습니다

4리다이렉트를 걸기 전에 끝나야 하는 것

리다이렉트만 걸고 아래를 안 하면 9/9에 앱 링크와 결제가 깨집니다.

항목9/8 현재 상태해야 할 것담당
P0앱 링크 검증 파일 www의 /.well-known/apple-app-site-association/.well-known/assetlinks.json 둘 다 404. apex·booking도 404 www 루트에 두 파일 게시. AASA는 확장자 없이 Content-Type: application/json, 리다이렉트 없이 200 인프라 + 앱
P0인증서 미확인 인증서 SAN에 aboutfishing.krwww.aboutfishing.kr이 모두 들어 있는지. apex가 인증서 오류를 내면 브라우저가 301에 닿기 전에 막힙니다 인프라
P0토스 PG 미확인 등록 도메인·successUrl·failUrl·웹훅 수신 주소를 www 기준으로 변경 인프라 + 결제
지도·CCTV API 키 미확인 키의 허용 도메인 목록에 www.aboutfishing.kr 추가. 빠지면 지도가 통째로 안 뜹니다 인프라
플레어레인 미확인 허용 도메인에 www 추가 인프라
네이버 서치어드바이저 apex·www가 서로 다른 코드로 각각 등록 301을 걸면 apex의 HTML 태그 검증이 더 이상 읽히지 않습니다. apex 소유확인을 DNS TXT로 옮기거나, apex 사이트를 www로 통합 마케팅
HSTS 미확인 apex에 HSTS가 걸려 있으면 www에도 같은 설정. includeSubDomains 여부 확인 인프라
아래는 인프라 소관이 아니지만 같은 전환에 묶여 있어 적어둡니다. 네이버 검색광고 광고그룹 26개의 연결 URL이 전부 booking이라 9/9에 일괄 교체가 필요하고 교체 시 재검수가 붙습니다. 앱스토어·플레이스토어 등록정보의 URL 3종, 한국관광공사 참가신청서에 적힌 홈페이지 주소도 booking으로 되어 있어 변경 통보가 필요합니다.

5적용 후 검증

적용 직후 아래를 그대로 실행해서 결과를 공유해주시면 됩니다.

301과 경로·쿼리 보존

curl -sI "https://aboutfishing.kr/" | head -5
# 기대: HTTP/2 301 / location: https://www.aboutfishing.kr/

curl -sI "https://aboutfishing.kr/?event=knto" | grep -i location
# 기대: location: https://www.aboutfishing.kr/?event=knto

curl -sI "https://aboutfishing.kr/map/?utm_source=naver&utm_medium=cpc" | grep -i location
# 기대: location: https://www.aboutfishing.kr/map/?utm_source=naver&utm_medium=cpc

curl -sI "http://aboutfishing.kr/" | grep -i location
# 기대: 한 번에 https://www.aboutfishing.kr/ 로 (중간에 http://www 를 거치지 않을 것)

홉 수 — 2회를 넘기지 말 것

curl -sIL "http://aboutfishing.kr/?event=knto" | grep -Ei "^(HTTP|location)"

예외 경로가 살아 있는지

curl -sI "https://aboutfishing.kr/.well-known/apple-app-site-association" | head -3
# 기대: 200 (301이 아닐 것)

curl -s "https://www.aboutfishing.kr/.well-known/apple-app-site-association" | head -3
curl -s "https://www.aboutfishing.kr/.well-known/assetlinks.json" | head -3
# 기대: 둘 다 JSON 본문. 9/8 현재는 404

www가 자기 자신을 리다이렉트하지 않는지

curl -sI "https://www.aboutfishing.kr/" | head -3
# 기대: HTTP/2 200. 여기서 301이 나오면 무한 루프입니다

6일정

시점할 일
9/8(화) 오전0번 확인 회신 — apex 서빙 배포물 확정. 인증서 SAN 확인
9/8(화) 중4번 P0 3건 처리 (앱 링크 검증 파일 게시, 토스 PG 도메인, API 키 허용 도메인). 301 규칙은 만들어두되 비활성 상태로 대기
9/9(수) 오전www 전환과 동시에 301 규칙 활성화 → 5번 검증 실행 → 결과 공유
9/9(수) 이후구글 서치콘솔·네이버 서치어드바이저에서 apex 색인이 빠지고 www로 옮겨가는지 1~2주 관찰
롤백 전환 후 30분 안에 결제·로그인·예약 중 하나라도 다수 실패가 확인되면 301 규칙을 비활성화하고 원상 복구합니다. 규칙을 지우지 말고 비활성만 하면 되도록 만들어주세요.