워드프레스를 https 와 함께 이용하는 방법!

개인정보의 유출에 민감하며, https 를 사용할 수 있는 서버를 가지고 있는 사용자들을 위한 간단한 rewrite rule 을 소개하고자 합니다. 오픈웹 사이트를 보면 워드프레스에서 사용자 등록, 로그인, 관리자 모드 등에서는 https 를 사용하도록 리다이렉션이 일어나는 모습을 확인할 수 있습니다.

시작하기에 앞서 이 방식은 아래의 조건을 만족해야 사용할 수 있습니다.

  1. 내 사이트를 https 로 접근이 가능
  2. mod_rewrite 를 사용가능
  3. .htaccess 를 이용 rewrite rule 을 override 가능

워드프레스 루트 디렉토리의 .htaccess 에 들어가야 할 rule 은 다음과 같습니다. (rewrite base 는 wp 의 root location 에 맞게 수정해주면 되겠습니다.)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# For a site running on port 443 (http over ssl)
RewriteCond %{SERVER_PORT} !^80$
RewriteRule !^wp-(admin|login|register)(.*) – [C] RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [L]

# For a site running on port 80 (http)
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^wp-(admin|login|register)(.*) https://%{SERVER_NAME}:10001/wp-$1$2
[L]

RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] </IfModule>

뭔가 복잡하죠 :) 부분부분 설명을 드리자면 아래와 같습니다.

# For a site running on port 443 (http over ssl)
RewriteCond %{SERVER_PORT} !^80$
RewriteRule !^wp-(admin|login|register)(.*) – [C] RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [L]

80번 포트가 아닌 포트로 접속한 경우를 https request 라고 판단을 하고, 그 중 request uri 가 wp-admin, wp-login, wp-register 와 관련된 것이 아닌 경우에 한해 80번 포트로 리다이렉션을 일으킵니다.

결과적으로 https://b.mytears.org:10001/2005/03/136 과 같은 url 을 http://b.mytears.org/2005/03/136 으로 연결시켜주는 역할을 합니다. (이 url 의 경우 개인적으로 심혈을 기울여 수정했음에도 봐주는 이가 없어서 -_-! 밀어주기를 위해 이런 예제에 자주 사용할겁니다. 캬캬)

# For a site running on port 80 (http)
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^wp-(admin|login|register)(.*) https://%{SERVER_NAME}:10001/wp-$1$2
[L]

80번 포트로 들어오는 요청 들 중에 wp-admin, login, register 등과 관련된 것들에 한해서 https 로 리다이렉션 시킵니다. %{SERVER_NAME} 뒤에 :10001 이 붙은 것은 제 https 서버가 10001 포트에서 돌고 있기 때문입니다.

RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

지금까지 조건에는 해당되지 않은 경우들 중에 실제 서버에 있는 파일이나 디렉토리에 대한 요청이 아닌 경우 index.php 파일을 불러오게 됩니다. wordpress 의 fancy url 을 사용하는 경우를 위한 설정이 되겠습니다.

간단하죠? ;)

Published by

3 thoughts on “워드프레스를 https 와 함께 이용하는 방법!”

  1. 안녕하세요
    워드프레스 홈페이지에 ssl 소스설정하는데
    계속 오류가 나서 여기까지 오게 되었네요;;
    단순히 인덱스파일에 리다이렉션 소스만 추가한다고 해서 되는게
    아니라는 말씀이신가요? 호스팅업체에서 ssl인증서는 자동으로 설치받았구요
    홈페이지에 적용만 하면 되는데 잘 안되네요…ㅠㅠㅠ
    기본포트 80번을 사용하고 있는데 ssl포트로 바꿔줘야 하는거죠?

  2. 안녕하세요? 카페24 호스팅에 워드프레스 사용자인데요.
    COMODO SSL 인증서를 발급받아 설치가 완료되었다고 통지받아, http대신 https:// 경로에 4**** 포트넘버를 추가하여 워드프레스 어드민 모드 접속을 시도했으나 여전히 연결 에러가 뜹니다.
    1) http://www.sonet.kr:42008/wp/wp-login.php 엔터시 워드프레스 어드민 접속 정상 연결
    2) 워드프레스 어드민 접속 정보(ID: letsgo99 / PW: ******** ) 입력 후 [로그인] 클릭시 [사이트에 연결할 수 없음] 에러 메시지가 뜹니다.
    이 때 URL 입력창의 포트 넘버가 사라지면서 http://www.sonet.kr/wp/wp-login.php 을 접속시도한 것으로 바뀌어 버립니다.

    이에 대한 문의를 카페24 쪽에 했더니 자신들의 셋팅 작업은 끝났다면서 워드프레스 셋업은 사용자가 알아서 하라고 하면서 바로 이 페이지 링크 하나만 달랑 붙여주고 말더군요. 설명에 나온 방식으로 아무리 .htaccess 파일을 수정해 보아도 [로그인] 버튼을 누르면 다시 http: 로 돌아가버리고 정상 접속이 안됩니다.

    443 포트를 단독으로 쓸 수 없는 공유 호스팅 구조에서는 SSL 정상 사용이 불가하다고 설명하는 분들도 계신데, 그런가요? 바쁘시겠지만 힌트 답신 주시면 대단히 고맙겠습니다.

    1. http://www.sonet.kr:42008/wp/wp-login.php 로 접속했을때 문제가 없다고 하면, 서버측에서 해당 포트가 https가 아닌 http로 설정되어 있는거에요. 업체측에서 잘못 설정한 부분입니다. 설정이 정상적으로 되었다면 https://…:42008 식으로 접근했을때만 정상 접근되어야 하고, http://…:42008로 접근하면 에러가 나야 맞습니다.

      로그인이 실패하는 건 설정이 잘못되서 그런게 아닌가 싶고, 443포트를 단독으로 쓸 수 없다고 하더라도 기본포트가 아닌 다른 포트를 제공해준다고 하면 사용상에는 문제가 없습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">