IIS7 : HTTP-> HTTPS 정리


답변:


177

가장 깨끗한 방법은 IIS-aid.com에 설명되어 있습니다 . web.config 전용이므로 서버를 변경하면 403.4 사용자 정의 오류 페이지 또는 기타 특수 권한으로 수행 한 모든 단계를 기억할 필요가 없으며 작동합니다.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

9
이것은 리디렉션 URL을 https : // {HTTP_HOST} {REQUEST_URI}로 수정해야한다는 점을 제외하고는 나를 위해 일했습니다.
Andrew S

6
이것은 또한 나를 위해 일했습니다. 나는 ...에서 내가 실행중인 응용 프로그램을 추가했다 로컬 호스트 / APP1 =>에 http : // {HTTP_HOST} / APP1 / {R : 1}
RealSollyM

15
다시 쓰기 섹션이없는 사람은 web.config의 다음 섹션에 규칙을 배치하십시오. <system.webServer> <rewrite> <rules> ... </ rules> </ rewrite> </ system .webServer>
raider33 오전

16
IIS 서버에 Microsoft URL Rewrite Module이 설치되어 있는지 확인하십시오
Iman

7
SEO 이유로 인해 redirectType = "Permanent"를 사용해야합니다. support.google.com/webmasters/answer/…
Niels Bosma

14

내가 찾은 가장 쉽고 깨끗한 솔루션은

  1. SSL 설정에서-> SSL 필요

  2. 오류 페이지에서-> 403.4 오류-> HTTPS 사이트로 리디렉션

  3. 오류 페이지에서-> 기능 설정 편집 ...-> 로컬 요청에 대한 자세한 오류 설정 및 원격 요청에 대한 사용자 정의 오류 페이지 설정

이점은 추가 코드 줄이 필요 없다는 것입니다. 단점은 절대 URL로 리디렉션한다는 것입니다.


1
완벽하게 작동합니다 (IIS 8.5 / 2012 R2에서). 더 Web.config의 땜질 없습니다
schmendrick

이 단점의 예를 들어 주시겠습니까? 어떤 상황에서 발생하며 왜 부정적인 것입니까? 답변에 추가 할 수 있다면 좋을 것입니다. 고마워요!
Marcos Dimitrio

2
@MarcosDimitrio 오래 전부터 확실하지 않습니다. 그러나 나는 그것이 당신을 절대 URL로 리디렉션한다는 것을 의미했을 때 나는 "기본 URL"을 의미한다고 생각합니다. 예를 들어 "http": //mywebsite.com/hellokitty는 "https": //mywebsite.com으로 경로 재 지정되므로 일부 경로 정보가 손실되므로 추가 경로 정보가있는 기존의 모든 링크가 끊어집니다.
ColacX

5

깔끔한 방법은 http-> https에서 URL 체계 만 변경하고 다른 모든 것은 동일하게 둡니다. 브라우저 문제가 없도록 서버 측이어야합니다.

JPPinto.com에는 서버 측 리디렉션 대신 javascript (HttpRedirect.htm)를 사용하는 것을 제외하고는이 작업을 수행하는 방법에 대한 단계별 지침 이 있습니다. 어떤 이유로, '친숙한 HTTP 오류 메시지 표시'가 활성화되어 있으면 IE가 자바 스크립트를 실행할 수 없습니다. 기본적으로 켜져 있습니다. 스크립트의 또 다른 점은 경로로의 리디렉션이 FF 또는 Chrome에서도 작동하지 않는다는 것입니다. 스크립트는 항상 루트로 리디렉션됩니다. (아마도 경로로 리디렉션되어야하기 때문에 무언가를 놓쳤습니다.)

이러한 이유로 리디렉션에 ASP 페이지를 사용했습니다. 물론 단점은 서버에서 클래식 ASP를 활성화해야한다는 것입니다.

OpsanBlog에는 IIS6에서 잘 작동 하는 ASP 스크립트 및 지침 이 있습니다.

IIS7 에서이 방법을 사용하는 데 몇 가지 문제가 있습니다. IIS7을 사용하면 쉽게 놓칠 수 있으므로 사용자 인터페이스 문제가 대부분입니다.

  • 먼저 ASP를 웹 서버 역할 기능으로 설치해야합니다.
  • 둘째, IIS7에서 가상 디렉터리를 사용하는 것이 예상대로 작동하지 않아 디버깅을 시도하지 않았습니다. 대신 사이트의 루트 폴더에 파일을 넣고 403.4 오류 페이지의 url '/SSLRedirect.asp'를 사용하여 참조했습니다.
  • 마지막으로 가장 까다로운 부분 은 SSLRedirect.asp에 SSL을 적용해서는 안됩니다 . 그렇지 않으면 403.4 오류가 발생합니다. 이렇게하려면 IIS7 '콘텐츠보기'에서 파일을 선택하고 '기능보기'로 전환하여 단일 파일의 SSL 설정을 편집하고 'SSL 필요'확인란을 비활성화하십시오.

IIS 관리자는 파일 이름을 헤더에 표시해야합니다.


1
JPPinto.com의 링크 된 지침은 IIS 7.5 또는 R2에서 작동하지 않음을 강조하기 위해 업데이트되었습니다. 최신 IIS 버전의 보안 변경으로 인해 잠금 위반이 발생한다고합니다. 대신 URL Rewrite 2.0 방법을 사용하는 것이 좋습니다 (@toxaq의 답변에 따라 비슷한 접근 방식).
Robert Shattock 2019

0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}

1
나는 쉽게 예를 들어 쿼리 문자열을 URI에 "localhost"를 어딘가에 넣어이 리디렉션을 주위에 얻을 수 yourdomain.com?localhost=true 내가 대신 Request.Url.Host의 속성을 확인 제안
Aidy J

0

클래식 ASP (인트라넷)를 사용하고 로그인이 필요한 페이지에서 로그온 포함 파일이 리디렉션을 수행합니다.

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

물론 이것은 GET 또는 POST 데이터를 포함하지 않습니다. 실제로 보안 페이지로 깔끔하게 리디렉션됩니다.


-4

'정리 적으로'는 300 리디렉션과 같은 의미라고 생각합니다. 많은 서버 및 언어를 구성 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.