로그인 시 url 패러미터로 이동되지 않는 문제에 대해

로그인 시 url 패러미터로 이동되지 않는 문제에 대해

QA

로그인 시 url 패러미터로 이동되지 않는 문제에 대해

본문

안녕하세요.

 

문제를 확인해보니 간단한거 같으면서도 어렵네요.

 

로그인을 하고 왜 이전 페이지로 돌아가지 않는지 확인해보니, 다음과 같았습니다.

 

https://mysite.net/bbs/login.php?url=https://mysite.net/bbs/board.php?bo_table=best&wr_id=347923

-> 제대로 동작 않고 게시판으로 돌아가버림

 

https://mysite.net/bbs/login.php?url=https%3A%2F%2Fmysite.net%2Fbbs%2Fboard.php%3Fbo_table%3Dbest%26amp%3Bwr_id%3D347926

-> 제대로 동작함

 

현재 게시글 본문을 보는 페이지 내에서 로그인 버튼을 클릭 시 윗쪽과 같이 주소로 이동되는 바람에 제대로 동작이 되지 않고 있습니다.

 

버튼이 있는 menu.php로 가보면 단순히 $urlencode을 호출할 뿐이고, 이를 호출하는 common.php을 가도 뭐가 잘못된 건지 알기가 어렵네요ㅜ

 

어떻게 수정하면 좋을까요?

 

 


(common..php)
// URL ENCODING
if (isset($_REQUEST['url'])) {
    $url = strip_tags(trim($_REQUEST['url']));
    $urlencode = urlencode($url);
} else {
    $url = '';
    $urlencode = urlencode($_SERVER['REQUEST_URI']);
    if (G5_DOMAIN) {
        $p = @parse_url(G5_DOMAIN);
        $urlencode = G5_DOMAIN.urldecode(preg_replace("/^".urlencode($p['path'])."/", "", $urlencode));
    }
}
]

 

 

이 질문에 댓글 쓰기 :

답변 2

$urlencode = G5_DOMAIN.urldecode(preg_replace("/^".urlencode($p['path'])."/", "", $urlencode));

 

요 부분에서 urldecode 한 후에 다시 urlencdoe가 없어서 그런데요 

G5_DOMAIN을 config.php에 설정하셨군요?

좀더 살펴봐야 알겠지만 그누보드 의도를 잘 몰라서...

G5_DOMAIN  에 서브폴더까지 지정한 경우

define('G5_DOMAIN', 'http://www.domain.com/gnuboard5');

request_uri 에서 gnuboard5를 제거한 후 다시 g5_domain을 붙이는 코드인데요

 

게시판에서

http://www.domain.com/gnuboard5/bbs/board.php?bo_table=free&wr_id=1

$url_encode 가

/gnuboard5/bbs/board.php?bo_table=free&wr_id=1

서브폴더 제거 (urlencode된 상태로)

/bbs/board.php?bo_table=free&wr_id=1

(urldecode 하고)다시 G5_DOMAIN 붙임

http://www.domain.com/gnuboard5/bbs/board.php?bo_table=free&wr_id=1

이렇게 변형되네요

그런다음 urlencode 를 해야하는데...;

왜 안했는지는 잘 모르겠어요

$urlencode = urlencode(G5_DOMAIN.urldecode(preg_replace("/^".urlencode($p['path'])."/", "", $urlencode)));

 

네...
common.php은 공통 코어파일이고
$urlencode 변수는 여러곳에서 사용하므로
다른 곳에서 오작동할 가능성이 있을 수 있습니다

5.4.2.7 이후로 바뀐 건 없는 것 같네요
https://github.com/gnuboard/gnuboard5/blob/5.4.2.7/common.php#L376
https://github.com/gnuboard/gnuboard5/blob/5.4.5.1/common.php#L377

파라미터에서는 url이라는 값에 & ? 처리가 되지 않아야하므로

/bbs/login_check.php 한번 확인해보세요

 


if ($url) {
    // url 체크
    check_url_host($url, '', G5_URL, true);
    $link = urldecode($url);
    // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
    if (preg_match("/\?/", $link))
        $split= "&";
    else
        $split= "?";
    // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
    $post_check_keys = array('mb_id', 'mb_password', 'x', 'y', 'url');
    
    //소셜 로그인 추가
    if($is_social_login){
        $post_check_keys[] = 'provider';
    }
    $post_check_keys = run_replace('login_check_post_check_keys', $post_check_keys, $link, $is_social_login);
    foreach($_POST as $key=>$value) {
        if ($key && !in_array($key, $post_check_keys)) {
            $link .= "$split$key=$value";
            $split = "&";
        }
    }
} else  {
    $link = G5_URL;
}

것도아니라면 lib폴더에 uri.lib.php를 최신화(그누보드 원본) 시켜보는것도 나쁘진않겠네요

답변을 작성하시기 전에 로그인 해주세요.
전체 26
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT