저는 공유 호스팅 LAMP 환경에서 작은 웹사이트를 관리하고 있습니다. 이는 기본적으로 제가 편집할 수 있는 유일한 것은 htaccess 파일이라는 의미입니다.
HSTS 지원을 추가하고 싶었지만(그리고 그렇게 했습니다),여기에서 내 웹사이트를 테스트했습니다.HSTS 사전 로드 자격과 관련하여 다음 오류가 발생했습니다.
오류: HTTP가 www로 먼저 리디렉션됩니다.
http://example
(HTTP)는https://example
www 하위 도메인을 추가하기 전에 즉시 (HTTPS)로 리디렉션되어야 합니다. 현재 첫 번째 리디렉션은https://www.example.
HSTS를 지원하는 모든 브라우저가 하위 도메인뿐만 아니라 최상위 도메인에 대한 HSTS 항목을 기록하도록 하기 위해 추가 리디렉션이 필요합니다.
따라서 사용자를 다음과 같이 리디렉션해야 한다고 생각합니다.
http://example
(이것은 사용자가 브라우저의 주소 표시줄에 입력하는 내용입니다.)https://example
(우리는 그를 웹사이트의 HTTPS 버전으로 리디렉션합니다)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 사전 로드 목록 제출 요구 사항:
- 포트 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)에 대한 요청을 정규화하지 않기 때문에 그 자체로 완료되지 않았을 것입니다.
추가 자료:
- HSTS 구현에 대해 자세히 설명하는 Pro Webmasters SE 관련 질문에 대한 내 대답은 다음과 같습니다
.htaccess
.https://webmasters.stackexchange.com/a/112264/52912