테스트 사이트 - 개발 중인 베타 버전입니다

로그인 시 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을 가도 뭐가 잘못된 건지 알기가 어렵네요ㅜ

 

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

 

 

</p>

<p>(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));

    }

}</p>

<p>
]

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

$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)));

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

G5_DOMAIN 작업은 https 일때 http 로 넘기기 위한 것 같습니다
(모든 페이지에 적용되는 common.php 파일이므로)
감사합니다. 이제 잘 돌아가네요!
제 그누보드 버젼이 5.4.2.7인데, 그 사이 업데이트 되어서 차이가 있는지는 모르겠습니다..
네...
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 한번 확인해보세요

 

</p>

<p>if ($url) {

    // url 체크

    check_url_host($url, '', G5_URL, true);</p>

<p>    $link = urldecode($url);

    // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)

    if (preg_match("/\?/", $link))

        $split= "&";

    else

        $split= "?";</p>

<p>    // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김

    $post_check_keys = array('mb_id', 'mb_password', 'x', 'y', 'url');

    

    //소셜 로그인 추가

    if($is_social_login){

        $post_check_keys[] = 'provider';

    }</p>

<p>    $post_check_keys = run_replace('login_check_post_check_keys', $post_check_keys, $link, $is_social_login);</p>

<p>    foreach($_POST as $key=>$value) {

        if ($key && !in_array($key, $post_check_keys)) {

            $link .= "$split$key=$value";

            $split = "&";

        }

    }</p>

<p>} else  {

    $link = G5_URL;

}</p>

<p>

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고