XE의 SSL 사용 옵션중 "사용안함", "선택적으로", "항상 사용"이 있습니다.
저는 "선택적으로" 체크하여 사용했는데...
간혹, 링크에 오류가 생기더라구요~ (오류라기 보다는 제대로 링크가 반영이 안되는 거죠...)
우선, 저의 서버 세팅은 아래와 같습니다.
http -> 8081번
https -> 443 또는 444번
선택적으로 사용하기에 체크했으므로, 링크의 act 값중에서 아래 값이 포함되면
https://web.geusgod.pe.kr:444... 이런식으로 링크값이 걸려 있어야 합니다.
XE의 javascript 변수중에 아래와 같은 변수가 있습니다. 여기에 해당하면 ssl 링크가 걸리게 됩니다.
var ssl_actions = new Array("dispMemberModifyPassword","dispMemberSignUpForm","dispMemberModifyInfo","dispMemberModifyEmailAddress","dispMemberGetTempPassword","dispMemberResendAuthMail","dispMemberLoginForm","dispMemberFindAccount","dispMemberLeave","procMemberLogin","procMemberModifyPassword","procMemberInsert","procMemberModifyInfo","procMemberFindAccount","procMemberModifyEmailAddress","procMemberUpdateAuthMail","procMemberResendAuthMail","procMemberLeave");
참고로 /files/cache/sslCacheFile.php 파일에 해당 값이 저장되어 있습니다.
여기서 문제가, https로 전환된 이후 링크 값들이 아래와 같이 잘못 변환됨을 확인하였습니다.
https://web.geusgod.pe.kr:8081...
머 서버 세팅으로 8081이여도 ssl이 적용되게 할 수 있을지는 몰라도... (이럴꺼면 ssl 항상 사용을 체크하지요^^)
아무튼 이걸 해결 하는 방법입니다.
/classes/context/Context.class.php 파일안에
getRequestUri 함수가 있습니다.
아래와 같이 수정하였습니다.
if($use_ssl)
{
$port = self::get('_https_port'); /*if($port && $port != 443)
{
$url_info['port'] = $port;
}
elseif($url_info['port'] == 443)
{
unset($url_info['port']);
}*/
if($port && $url_info['port'] == 443) {
unset($url_info['port']);
}else{
$url_info['port'] = $port;
}
}
else
{
$port = self::get('_http_port'); /*if($port && $port != 80)
{
$url_info['port'] = $port;
}
elseif($url_info['port'] == 80)
{
unset($url_info['port']);
}*/
if($port && $url_info['port'] == 80) {
unset($url_info['port']);
}else{
$url_info['port'] = $port;
}
}
XE에서 일반적인 링크는 아래의 함수를 사용합니다. xeschool 매뉴얼도 참조^^
getUrl : http://www.xeschool.com/xe/xenote_useful_function_geturl
그리고 form에서 action 링크에 ssl를 걸고 싶다면...
{getUrl('','act','procMemberLogin')} 이런식으로 적어야 합니다.
member모듈의 default 스킨이에 form이 {getUrl()}로 되어 있어서 http 포트번호와 https 포트번호에 따라
폼 전송 링크가 https로 전송이 안될수도 있습니다.
이유는 ssl이 선택적으로 적용될려면 getUrl 기본으로는 안되고,
위에서 언급한 특정 act 값에 따라서 적용되는 것이다.
그래서 get으로 의미는 없지만 {getUrl('','act','procMemberLogin')} 이런식으로 적어주고...
아라 hidden 값은 그대로 놔두는 것입니다.
<input type="hidden" name="act" value="procMemberLogin" />
아무튼 선택적으로 적용한다는게 쉽지많은 않은것 같네요~
마지막으로, 이렇게 한다고 해서 모든 부분이 해결된건 아닌것 같습니다.
지금 소스보기로 보니 아래와 같다. 선택적으로 ssl 사용하기 일때는 이부분도 수정해 줘야 할 것이다. (이건 숙제로... -0-)
<link rel="alternate" type="application/rss+xml" title="Site RSS" href="https://web.geusgod.pe.kr:444/rss" />
<link rel="alternate" type="application/atom+xml" title="Site Atom" href="https://web.geusgod.pe.kr:444/atom" />