Q&A

인터넷에 찾아보니까 다양한 방법들이 있던데

 

개중에는 잘못된 방법도 있어서 (xe 공홈 팁게시판에 올라온 방법이 잘못된 방법이더군요... "RewriteCond %{HTTPS} !=on" 이랑 "RewriteCond %{HTTPS} on" 을 서로 반대로 적어놓으심...)

 

정말 한참 고생했네요

 

일단 알아낸 방법들이 몇개 있는데

 

1)

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://(도메인)\.(도메인)/$1 [R=301,L]

 

2)

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]

 

3)

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

 

 

 

일단 이것들 모두 제대로 작동은 하는 거 같은데...

 

차이가 뭔가요?

 

모양이 약간씩 다른 걸 봐서 작용방식도 좀 다를 거 같은데...

댓글 9

  • 뭐 저도 어찌어찌 했는데요. 하위폴더까지 모두 다 되는지 꼭 확인해보세요. 메인주소까지만 되는경우가 있어서요.
  • @웹지기

    이거 보고 테스트해보니까 저도 메인주소까지만 되네요.(뒤에 모듈명이 붙거나 하면 페이지를 찾을 수 없다고 나오네요) 일단 2번으로 했는데... 다른 방법을 찾아봐야 할듯

  • @기븐
    다른 RewriteRule이 더 있을 경우 위치때믄에 영향을 받아요. 다른거 있으면 위치도 검토해보세요. 제일 위로 올렸던 것으로 기억됩니다.
  • @웹지기
    2번으로 하니까 최상단으로 올려도 안되고, 3번으로 하니까 되네요. (이유는 모르지만...) 덕분에 해결했습니다. 감사합니다
  • 별 차이는 없어보여요..
    코드 해석을 달아드릴게요.

    1)
    HTTPS 상태가 on 이 아닌 경우 (켜져있지 않은 경우), 서버의 아무 경로로 접속했을때 같은 경로의 https://(도메인)\.(도메인)/ 로 이동.

    2)
    1과 같은 상황일 때 서버의 host 값을 이용해서 같은 경로로 이동

    3)
    HTTPS 상태가 off 인 경우 (HTTPS 가 꺼져있다고 인지되는 경우) 요청된 경로로 이동.

    참고)
    HTTP 또는 HTTPS 접속일 때 서버의 %{HTTPS} 값이 경우에 따라 다를 수 있어요. 클라우드플레어를 이용하는 경우가 대표적인 예시가 됩니다. 플렉서블 설정이면 HTTPS 접속으로 클라이언트는 접속하는 순간에도 %{HTTPS} 는 on이 아닐 수 있어요.
    여러가지 예외가 있기 때문에 상황에 맞는 코드를 쓰시면 됩니다.
  • @misol
    하나 궁금한게 있습니다. "HTTPS 상태가 off인 경우" 이거는 사용자가 주소창에 "http://" 라고 친 경우를 의미하는 건가요, 아님 서버에서 TLS를 사용하지 않고 있을 때를 의미하는 건가요?

    일단 제대로 작동하는 걸 보면(서버에서 TLS 사용하고 있고, http://라고 입력하면 https://로 리다이렉트됨) 전자를 의미하는 거 같은데...

    글구 3번째는 RewriteRule 다음에 ^(.*)$ 가 아니라 (.*) 로 되어 있는데 이런건 아무 상관 없는건가요? (이쪽은 완전 문외한이라...)

    일단 지금 2번째로 쓰고 있습니다.
  • @기븐
    ^ 표시는 시작을 의미하고
    $는 끝 부분을 의미합니다
    . 는 아무 문자나 의미하고
    * 는 앞의 문자가 여러개 있거나 없는 것을 의미합니다.
    자세한건 정규식에 대해 찾아보시면 자세한 글들이 있을겁니다.

    간단하게 ^(.*)$ 는 아무런 문자 전체를 선택한 것이고 (.*)는 아무 문자를 지정하지 않은 길이로 한 것인데 전체 길이로 잡을겁니다. 결국 결과는 비슷합니다.

    HTTPS on 이나 off 는 서버 입장에서가 맞습니다. 클라우드 플레어 모듈 같은걸 설치하셨다면 보정이 되어 있긴 할겁니다.☺
  • @misol
    근데 서버 입장이면 지금 TLS를 쓰고 있으니 HTTPS on인 상태 아닌가요? 그럼

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

    이렇게 입력해야 작동하는거 같은데... 실제로 구글에서 찾아보면 거의 모든 사이트에서 off 내지는 !=on 으로 하라고 나와 있고, 실제로 off라고 해야 적용되네요 (on으로 하면 리다이렉트가 안됩니다)

    잘 이해가 안되네요

    (물론 클플은 사용하지 않고 있습니다)
  • @기븐
    RewriteCond %{HTTPS} !on 으로 한번 입력해보시겠어요?