로그인 시 url 패러미터로 이동되지 않는 문제에 대해
본문
안녕하세요.
문제를 확인해보니 간단한거 같으면서도 어렵네요.
로그인을 하고 왜 이전 페이지로 돌아가지 않는지 확인해보니, 다음과 같았습니다.
https://mysite.net/bbs/login.php?url=https://mysite.net/bbs/board.php?bo_table=best&wr_id=347923
-> 제대로 동작 않고 게시판으로 돌아가버림
-> 제대로 동작함
현재 게시글 본문을 보는 페이지 내에서 로그인 버튼을 클릭 시 윗쪽과 같이 주소로 이동되는 바람에 제대로 동작이 되지 않고 있습니다.
버튼이 있는 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)));
파라미터에서는 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를 최신화(그누보드 원본) 시켜보는것도 나쁘진않겠네요
!-->