HSTS 및 이중 재 지정


9

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

HSTS 지원을 추가하고 싶었지만 HSTS 사전로드 자격에 대해 웹 사이트를 테스트 할 때 다음 오류가 발생했습니다.

오류 : HTTP가 먼저 www로 리디렉션

http://examplehttps://examplewww 하위 도메인을 추가하기 전에 (HTTP)가 즉시 (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로 리디렉션하는 올바른 방법은 무엇입니까? 그리고 : 어떤 위험이 있습니까?

답변:


10

HSTS 사전로드 목록 제출 요구 사항 에 명시된대로 :

  1. 포트 80에서 수신 대기중인 경우 동일한 호스트에서 HTTP에서 HTTPS로 리디렉션하십시오.

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

이 방법으로 마지막 줄 앞에 리디렉션을 추가하려고했습니다.

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_HOST서버 변수의 값이 들어 HostHTTP 요청 헤더 (예. 요청되는 어떤 호스트).

두 번째 리디렉션 상태는 요청 된 호스트가 시작되지 않은 모든 요청에 ​​대해 호스트 www.접두사 www.입니다. 그러나 자연스럽게 www 하위 도메인으로 리디렉션되므로 여러 하위 도메인 (같은 장소로 확인)을 별도로 유지하려는 경우에는 허용되지 않을 수 있습니다.

이들은 302 (임시) 리디렉션입니다. 제대로 작동하는지 확인한 경우에만 301로 변경하십시오.

그리고 : 어떤 위험이 있습니까?

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


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

따로 : (현재 HSTS를 무시하는 중 ...) 요청이 정규화되지 않기 때문에 https://example.com/...(예 : HTTPS 및 도메인 에이펙스) 자체적으로 완료되지 않았을 것 입니다.


더 읽을 거리 :


대단히 감사합니다. 곧 테스트하겠습니다. 최종 Aside에 대한 빠른 답변 : 어쨌든 작동하지만 직접 제어 할 수없는 것처럼 보입니다 (최소한 : 호스팅 제공 업체 웹 사이트 관리자에 리디렉션 패널이 있음)

1
Btw, 솔루션이 완벽하게 작동합니다! :-)

1
"호스팅 제공 업체 웹 사이트 관리자의 리디렉션 패널"-항상 그러한 도구에주의해야합니다. 예를 들어 cPanel의 리디렉션 섹션은 매우 제한적이며 악명이 높습니다.
MrWhite

1
Strict-Transport-Security응답 헤더를 설정하는 방법에 따라 다릅니다 . 예를 들어, 리디렉션에서이를 설정 always하려면 Header지시문 에서 인수 를 사용해야합니다 . 나는 프로 웹 마스터 스택에 관련된 질문 대답 (대한 내 대답의 첫 부분 건너 뛰기 on/를 off"HSTS이 구현에 대한 자세한 내용이수록) 미리로드 에서"를 .htaccess.
MrWhite

1
천만에요. 솔직히 말해서, Pro Webmasters 스택 은 아마도 .htaccess관련 질문 에만 더 적합 할 것입니다 (ServerFault는 서버를 완전히 제어 할 수 있다고 가정합니다.이 경우에는이 작업을 수행하지 않을 것입니다 .htaccess). 틀림없이 쉽게 분리 사용하여 서버 설정에서 이것을 구현하는 <VirtualHost>컨테이너 (이 바르 추가 ENV으로 엉망이 필요하지 않기 때문에 조건 - 그것은 "청소기"오류에 덜 경향이다). 에 액세스 할 수있는 경우 "사전로드 목록"제출을 권장하지 않습니다 .htaccess. (My 2c)
MrWhite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.