시작하기에 앞서 이 방식은 아래의 조건을 만족해야 사용할 수 있습니다.
- 내 사이트를 https 로 접근이 가능
- mod_rewrite 를 사용가능
- .htaccess 를 이용 rewrite rule 을 override 가능
워드프레스 루트 디렉토리의 .htaccess 에 들어가야 할 rule 은 다음과 같습니다. (RrewriteBase 는 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 을 사용하는 경우를 위한 설정이 되겠습니다.