g5_path() 함수에 대한 건의
오류가 나는곳의 주소를 알려주시면 더 빠르고 정확하게 답변 받을 수 있습니다.
오류 주소 : common.php
g5_path() 함수에 대한 건의
1. rewriting 을 이용하는 경우,
웹 브라우저에 입력된 도메인과 G5 에서 인식하는 도메인이 다를 수 있습니다.
예를 들어 웹 브라우저 URL 입력 창에 "abc.domain.com" 으로 입력을 했는데,
g5_path() 에서 리턴하는 $g5_path['url'] 의 도메인은
rewriting 을 어떻게 하느냐에 따라서
'abc.domain.com' 이 아니라, 'www.domain.com' 또는 다르게 적용이 될 수 있습니다.
$_SERVER['SERVER_NAME'] 의 값을 사용하지 말고 다른 값을 사용하는 것이 어떨까요?
예를 들면 $_SERVER['HTTP_HOST'] 와 같은 값으로요.
2. URL 에 슬래쉬(/)가 겹치는 경우,
예를 들면 웹 브라우저에 입력된 주소가 "http://abc.domain.com/////g5/////index.php" 와 같은 경우
g5_path() 에서 올바른 파싱을 하지 못합니다.
슬래쉬가 두번 겹치는 경우는 올바르지 못한 입력일 경우가 많지만, 어쨌든 틀린 URL 이 아니고 제대로 파싱되어야 하며 서버의 자원을 올바로 액세스 할 수 있어야 합니다.
g5_path() 함수는 슬래쉬(/) 가 겹쳐지는 경우, str_replace(...) 에서 올바른 치환을 하지 못합니다.
예를 들면,
서브도메인을 사용하는 경우, 그리고 그것이 rewriting 으로 서브도메인이 구현되었다면,
때로는 rewriting 코드에서 디렉토리는 반드시 슬래쉬(/)로 끝이 나야 하도록 해 놓을 수도 있습니다.
"http://abc.domain.com/g5" 와 같이 끝에 슬래쉬를 붙이지 않으면 디렉토리가 존재함에도 불구하고 존재하지 않는 것으로 인식이 되어 그와 관련된 rewriting 코드가 실행이 됩니다.
이러한 과정에서 rewriting 방식으로 구현된 서브도메인 연결에서 끝에 슬래쉬(/)가 없으면 사이트가 올바로 동작하지 않는 것입니다.
G5_URL 에는 맨 끝애 슬래쉬(/) 가 붙지 않습니다.
그렇다고 G5_URL 의 끝에 슬래쉬를 붙이게 되면, head.sub.php 등 에서 슬래쉬(/) 가 겹쳐지게 출력됩니다.
------------------------------------------
이러한 것이 제 생각인데, 혹시 제가 틀린 것이 아닌지 모르겠네요.
다음은 제가 수정해 본 g5_path() 함수입니다.
[code]
function g5_path()
{
$result['path'] = str_replace('\\', '/', dirname(__FILE__));
$tilde_remove = preg_replace('/^\/\~[^\/]+(.*)$/', '$1', preg_replace('#/+#', '/', $_SERVER['SCRIPT_NAME']));
$document_root = str_replace($tilde_remove, '', $_SERVER['SCRIPT_FILENAME']);
$root = str_replace($document_root, '', $result['path']);
$port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
$http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
$user = str_replace(str_replace($document_root, '', $_SERVER['SCRIPT_FILENAME']), '', preg_replace('#/+#', '/', $_SERVER['SCRIPT_NAME']));
$result['url'] = $http.$_SERVER['HTTP_HOST'].$port.$user.$root;
return $result;
}
[/code]
오류 주소 : common.php
g5_path() 함수에 대한 건의
1. rewriting 을 이용하는 경우,
웹 브라우저에 입력된 도메인과 G5 에서 인식하는 도메인이 다를 수 있습니다.
예를 들어 웹 브라우저 URL 입력 창에 "abc.domain.com" 으로 입력을 했는데,
g5_path() 에서 리턴하는 $g5_path['url'] 의 도메인은
rewriting 을 어떻게 하느냐에 따라서
'abc.domain.com' 이 아니라, 'www.domain.com' 또는 다르게 적용이 될 수 있습니다.
$_SERVER['SERVER_NAME'] 의 값을 사용하지 말고 다른 값을 사용하는 것이 어떨까요?
예를 들면 $_SERVER['HTTP_HOST'] 와 같은 값으로요.
2. URL 에 슬래쉬(/)가 겹치는 경우,
예를 들면 웹 브라우저에 입력된 주소가 "http://abc.domain.com/////g5/////index.php" 와 같은 경우
g5_path() 에서 올바른 파싱을 하지 못합니다.
슬래쉬가 두번 겹치는 경우는 올바르지 못한 입력일 경우가 많지만, 어쨌든 틀린 URL 이 아니고 제대로 파싱되어야 하며 서버의 자원을 올바로 액세스 할 수 있어야 합니다.
g5_path() 함수는 슬래쉬(/) 가 겹쳐지는 경우, str_replace(...) 에서 올바른 치환을 하지 못합니다.
예를 들면,
서브도메인을 사용하는 경우, 그리고 그것이 rewriting 으로 서브도메인이 구현되었다면,
때로는 rewriting 코드에서 디렉토리는 반드시 슬래쉬(/)로 끝이 나야 하도록 해 놓을 수도 있습니다.
"http://abc.domain.com/g5" 와 같이 끝에 슬래쉬를 붙이지 않으면 디렉토리가 존재함에도 불구하고 존재하지 않는 것으로 인식이 되어 그와 관련된 rewriting 코드가 실행이 됩니다.
이러한 과정에서 rewriting 방식으로 구현된 서브도메인 연결에서 끝에 슬래쉬(/)가 없으면 사이트가 올바로 동작하지 않는 것입니다.
G5_URL 에는 맨 끝애 슬래쉬(/) 가 붙지 않습니다.
그렇다고 G5_URL 의 끝에 슬래쉬를 붙이게 되면, head.sub.php 등 에서 슬래쉬(/) 가 겹쳐지게 출력됩니다.
------------------------------------------
이러한 것이 제 생각인데, 혹시 제가 틀린 것이 아닌지 모르겠네요.
다음은 제가 수정해 본 g5_path() 함수입니다.
[code]
function g5_path()
{
$result['path'] = str_replace('\\', '/', dirname(__FILE__));
$tilde_remove = preg_replace('/^\/\~[^\/]+(.*)$/', '$1', preg_replace('#/+#', '/', $_SERVER['SCRIPT_NAME']));
$document_root = str_replace($tilde_remove, '', $_SERVER['SCRIPT_FILENAME']);
$root = str_replace($document_root, '', $result['path']);
$port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
$http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
$user = str_replace(str_replace($document_root, '', $_SERVER['SCRIPT_FILENAME']), '', preg_replace('#/+#', '/', $_SERVER['SCRIPT_NAME']));
$result['url'] = $http.$_SERVER['HTTP_HOST'].$port.$user.$root;
return $result;
}
[/code]
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 2개
하지만 이런 특정 경우와 다른 경우에서는 또 문제가 발생할 수도 있습니다. / 의 문제 역시 예를 들어
/// 인 경우에 어떤 특별한 처리를 하도록 설정이 되어 있을 때 무조건 /// 를 / 로 치환하는 것은 문제가
될 수도 있습니다. 특정 환경에 맞춰서 기본 코드를 변경하는 것은 어려울 것으로 생각됩니다.