HSTS 및 이중 리디렉션

HSTS 및 이중 리디렉션

저는 공유 호스팅 LAMP 환경에서 작은 웹사이트를 관리하고 있습니다. 이는 기본적으로 제가 편집할 수 있는 유일한 것은 htaccess 파일이라는 의미입니다.

HSTS 지원을 추가하고 싶었지만(그리고 그렇게 했습니다),여기에서 내 웹사이트를 테스트했습니다.HSTS 사전 로드 자격과 관련하여 다음 오류가 발생했습니다.

오류: HTTP가 www로 먼저 리디렉션됩니다.

http://example(HTTP)는 https://examplewww 하위 도메인을 추가하기 전에 즉시 (HTTPS)로 리디렉션되어야 합니다. 현재 첫 번째 리디렉션은 https://www.example.HSTS를 지원하는 모든 브라우저가 하위 도메인뿐만 아니라 최상위 도메인에 대한 HSTS 항목을 기록하도록 하기 위해 추가 리디렉션이 필요합니다.

따라서 사용자를 다음과 같이 리디렉션해야 한다고 생각합니다.

  1. http://example(이것은 사용자가 브라우저의 주소 표시줄에 입력하는 내용입니다.)
  2. https://example(우리는 그를 웹사이트의 HTTPS 버전으로 리디렉션합니다)
  3. https://www.example(우리는 그를 하위 도메인 www로 다시 리디렉션합니다)

현재 리디렉션은 다음과 같이 수행됩니다.

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

다음과 같이 마지막 줄 앞에 리디렉션을 추가하려고 했습니다.

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

하지만 브라우저에서 "페이지가 제대로 리디렉션되지 않습니다" 오류가 발생했습니다.

그렇다면 사용자를 http 버전의 웹 사이트에서 https로 리디렉션하고 마지막으로 www를 사용하여 https로 리디렉션하는 적절한 방법은 무엇입니까? 그리고 위험이 있나요?

답변1

에 언급된 바와 같이HSTS 사전 로드 목록 제출 요구 사항:

  1. 포트 80에서 수신 대기하는 경우 동일한 호스트에서 HTTP에서 HTTPS로 리디렉션합니다.

다음으로 리디렉션해야 합니다.같은 호스트(ie. HTTP_HOST), 단순히 example.com처음으로가 아닙니다. example.com사용자가 직접 요청하는 경우에는 리디렉션할 필요가 없습니다 www.example.com. (테스트에는 에 대한 요청이 포함됩니다 example.com.) 그런 다음 필요한 경우 표준 www 하위 도메인으로 리디렉션할 수 있습니다.

다음과 같이 마지막 줄 앞에 리디렉션을 추가하려고 했습니다.

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

RewriteCond이전 지시문은 첫 번째 지시문에만 적용되므로 RewriteRule두 번째 지시문은 RewriteRule무조건 실행되므로 리디렉션 루프가 생성됩니다 .

대신 다음과 같이 시도해 보세요.

# HTTP to HTTPS redirect
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]

# Canonical www redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]

서버 변수 에는 HTTP 요청 헤더(즉, 요청 중인 호스트가 무엇이든) HTTP_HOST의 값이 포함됩니다 .Host

두 번째 리디렉션 상태... 요청한 호스트가 시작되지 않는 모든 요청에 ​​대해 호스트 www.접두사를 지정합니다 . www.그러나 (동일한 위치로 확인되는) 하위 도메인이 여러 개 있는 경우 별도로 유지하려는 경우 자연스럽게 www 하위 도메인으로 리디렉션되기 때문에 이는 허용되지 않을 수 있습니다.

이는 302(임시) 리디렉션이라는 점에 유의하세요. 제대로 작동한다고 확신하는 경우에만 301로 변경하세요.

그리고 위험이 있나요?

위험이 없습니다. 예, 잠재적으로 두 개의 리디렉션이 있을 수 있지만 이전에는 하나만 있었을 수도 있습니다(아마도 효율성이 떨어짐). 그러나 여전히 리디렉션은 두 개뿐이므로 SEO에는 완벽하게 적합합니다. 게다가 HSTS를 사용하면 사용자 에이전트는 이중 리디렉션을 최대 한 번만 경험합니다.


RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

곁에:(지금은 HSTS를 무시합니다...) 이는 https://example.com/...(예: HTTPS 및 domain apex)에 대한 요청을 정규화하지 않기 때문에 그 자체로 완료되지 않았을 것입니다.


추가 자료:

관련 정보