[security] 모든 HTTP 요청을 HTTPS로 리디렉션하는 방법

내 사이트의 모든 안전하지 않은 HTTP 요청 (예 http://www.example.com:)을 HTTPS ( https://www.example.com) 로 리디렉션하려고합니다 . PHP btw를 사용하고 있습니다. .htaccess에서이 작업을 수행 할 수 있습니까?



답변

업데이트 : 이 답변은 몇 년 전에 받아 들여졌지만 이제는 Apache 설명서 에서이 방법을 권장하지 않습니다 . 사용Redirect대신 . 이 답변을 참조하십시오 .


RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


답변

아파치 문서는 재 작성을 사용하여에 추천 :

httpURL 을로 리디렉션하려면 https다음을 수행하십시오.

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

이 조각은, 주요 서버 구성 파일에 가야 하지.htaccess질문에 질문한다.

이 기사는 질문을하고 대답 한 후에 만 ​​올 수 있지만 현재 진행중인 방법 인 것 같습니다.


답변

301 리디렉션을 권장합니다.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


답변

이 질문 에서 말했듯 보안에 대한 잘못된 인상을 줄 수 있으므로 모든 HTTP 요청을 해당 HTTPS로 맹목적으로 리디렉션하지 않는 것이 좋습니다. 대신 HTTP 사이트의 “루트”를 HTTPS 사이트의 루트로 리디렉션하고 거기에서 HTTPS로만 연결해야합니다.

문제는 HTTPS 사이트의 일부 링크 또는 양식으로 인해 클라이언트가 HTTP 사이트로 요청을 보내면 리디렉션 전에 컨텐츠가 표시된다는 것입니다.

예를 들어, HTTPS를 통해 제공되는 페이지 중 하나 <form action="http://example.com/doSomething">에 명확하게 보내지 말아야 할 일부 데이터를 전송 하는 양식이있는 경우 브라우저는 먼저 전체 요청 (엔터티, POST 인 경우)을 HTTP 사이트로 보냅니다. 먼저. 리디렉션은 브라우저로 즉시 전송되며 많은 사용자가 경고를 비활성화하거나 무시하므로 무시 될 수 있습니다.

물론, HTTPS 사이트로 연결되어야하지만 HTTP 사이트에 대한 링크를 제공하는 실수는 HTTPS 사이트와 동일한 IP 주소의 HTTP 포트에서 무언가 수신 대기하는 즉시 문제를 일으킬 수 있습니다. 그러나 두 사이트를 “미러”로 유지하면 사용자가 HTTPS로 리디렉션하여 자동으로 수정한다고 가정하는 경향이있을 수 있지만 실수는 너무 늦기 때문에 실수 할 가능성이 높아질 뿐이라고 생각합니다. ( 이 질문 에서 비슷한 토론이있었습니다 . )


답변

도메인에서 https와 www를 사용하는 가장 좋은 방법은

RewriteCond %{HTTPS} off
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]


답변

이것이 작동하지만 가장 좋지 않은 HTML 리디렉션 접근 방식입니다.

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

PHP 접근

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect");
    }
}
?>

.htaccess 접근

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

에서 복사 :
www.letuslook.org


답변

http에서 https로 리디렉션하는이 방법이 마음에 듭니다. 각 사이트마다 편집 할 필요가 없기 때문입니다.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]