짧은주소 사용시 접속로직이 궁금합니다.

짧은주소 사용시 접속로직이 궁금합니다.

QA

짧은주소 사용시 접속로직이 궁금합니다.

답변 3

본문

안녕하세요. 

짧은 주소를 사용해서 페이지에 접속을 할때 어떤 로직으로 최종페이지까지 접속이 되는지 설명을 부탁드립니다.

게시물을 기준으로 글이름 짧은 주소는,

"도메인.com/게시판명/글이름(wr_seo_title)" 형식으로 되어 있습니다. 

일반 주소는 "도메인.com/bbs/board.php?bo_table=boardname&wr_id=123" 의 형식입니다.

 

게시판 설정에서 짧은 주소를 선택하면, g5_config 테이블의 cf_bbs_rewrite 에 선택번호(글이름의 경우 2)가 저장이 됩니다. 

이까지가 설정저장 부분인거 같은데, 이렇게 설정이 되었을때, 

짧은 주소로 접속이 이루어 지면, 어떤 로직과 어떤 파일, 함수 등을 참조해서, 최종 게시물에 도달하게 되는지 궁금합니다. 

도움 주실수 있으신 고수님이 계시면, 좀 자세히 설명을 부탁드립니다.  제가 그누보드에 익숙하지 못해서요.

감사합니다. 

 

이 질문에 댓글 쓰기 :

답변 3

그누보드에는 router가 없습니다.

.htaccess 파일에 정의된 rewrite 룰에만 의존하여 처리됩니다.

rewrite 룰에 의해서 각 파일로 직접 요청을 변경하여 처리되고, 그누보드의 코드에서는 rewrite를 처리하지 않습니다.

 

seo_title로 접근시에는 아래 코드에서 글을 찾습니다. 

https://github.com/gnuboard/gnuboard5/blob/d28be441088e53f3c38b66ba4327938cee24d0d2/common.php#L591

답변감사합니다.
어제 질문을 드리고, .htaccess 파일 설정 및 접속 로직에 대해서 좀 더 보긴했는데요.
추가로 궁금한게,
최초 list에서 view를 호출할때는 wr_seo_title 을 파라미터로 넘겨줘서 호출을 하게 되는데,
view페이지를 refresh 할때는 위의 wr_seo_title 값은 없는 상태에서 refresh가 되는데도 해당 페이지를 "도메인.com/게시판명/글이름(wr_seo_title)" 이 정보만 가지고 그대로 유지하고 있는데,
그렇다면, refresh 의 경우는 위에 url 을 파싱해서 "글이름" 부분의 정보를 가져와서 wr_seo_title 파라미터에 전달을 하는 것이겠지요?

웹서버에서 짧은 주소를 파라메터가 붙은 형태의 전통적인 URL로 변환하여 bbs.php 파일 등을 직접 호출하므로 그누보드 내에서는 요청한 짧은 주소를 직접 처리하지 않습니다(처리할 필요도 없고요).

즉, 그누보드 내에서는 짧은 주소에 대한 처리가 없고 웹서버의 rewrite룰에만 온전히 의존합니다.


wr_seo_title의 경우 https://github.com/gnuboard/gnuboard5/blob/d28be441088e53f3c38b66ba4327938cee24d0d2/lib/uri.lib.php#L353
이처럼 웹서버에서 URL로 변환하고 그누보드를 동작시킵니다.
브라우저의 주소는 짧은 주소로 그대로 유지되지만 웹서버에서 그누보드를 호출할 때는 파라메터가 붙은 URL로 호출됩니다.

간단하게 그누보드 내부에서는 짧은 주소로 요청했을 때 하는 일이 없다고 보시면 됩니다. 웹서버가 처리해주죠.

이러한 동작방식으로인해  지정된 몇가지의 짧은 주소만 사용할 수 있고, 이 규칙을 동적으로 확장하는 등의 확장성은 전혀 제공하지 않습니다.

자세한 답변 진심으로 감사드립니다.
제가 아직 많이 미숙하여, 다 이해를 하지는 못하는것 같아 죄송하네요.
그런데, 아직 로직을 다 이해하지 못해서 그런지는 모르겠는데, 코딩과정에서 wr_seo_title을 추출하는 console.log 를 찍어보면, 주소창의 https://도메인/aaa/bbb/ 로 나열이 되는 형식에 있어서는 https:// 를 제외한 나머지 부분의 "/" 로 구분이된 형식의 3번째 문자열이 wr_seo_title 의 값으로 들어가는 것을 확인하였습니다. 페이지를 많이 커스텀하여, 주소체계의 혼란은 있었으나, 저는 wr_seo_title 을 뽑아내는 어떠한 파싱코드도 작성하지 않은 상태인데, 저 값이 뽑혀져 나오는것을 보고,
rewrite후에 작성된 도메인을 기준으로 파싱을 하는것이 아닌가 하는 생각을 가지고, 계속 보다가 시간이 너무 많이 지체가 되고, 분석은 되지 않아서, 그냥 자체로 주소창을 파싱하여 wr_seo_title 얻어오는 방식으로 처리를 하였습니다.  이렇게 처리를 하고, 다른 부분에 꼬이지 않을까 하여, 원래 짧은 주소 체계를 이용할려고 계속 보았는데, 해결이 되지 않아서 문의를 드렸습니다.

제가 미숙하여, 완전히 의문이 풀리지는 않았지만, jihan6님의 답변으로 어느정도 감을 잡는데 많이 도움이 되었습니다.
감사합니다.

그누보드에서 짧은 주소를 사용하는 경우, 먼저 아래 파일들이 참조됩니다.

  • /bbs/seo.inc.php
  • /bbs/rewrite.php
  • /bbs/zmSpamFree.php

seo.inc.php 파일에서 다음과 같은 로직으로 접속됩니다.

  1. 접속한 짧은 주소를 기반으로 도메인과 테이블명, 글이름을 각각 분리합니다.
  2. 글이름을 기반으로 상세 게시물을 찾기 위해서 g5_write_테이블명 테이블에서 wr_seo_title 칼럼의 값과 비교합니다.
  3. wr_seo_title 칼럼의 값과 일치하는 게시물이 있을 경우, 해당 게시물의 wr_id 값을 찾고, 해당 wr_id 값을 기반으로 상세 게시물 페이지로 리다이렉트 합니다.

상세 게시물 페이지로 리다이렉트 되기 전에, zmSpamFree.php 파일에서 글이름과 관련된 로직이 실행됩니다. 

그리고 마지막으로, rewrite.php 파일에서 글이름과 관련된 로직이 실행됩니다.

정확한 건 아닌데, 제 생각에 이 순서대로 동작할 듯 합니다.

 

  1. 사용자가 짧은주소로 서버에 요청
  2. /.htaccess 파일 통해 웹서버가 해당 주소에 대응하는 실제 주소 검색
  3. /서버에서 해당 주소에 맞는 데이터 가져옴
  4. /.htaccess가 해당 주소를 다시 짧은주소 형태로 변환
  5. /사용자에게 해당 정보를 전달

 

더 자세한 건 공부해 봐야 되나서...ㅎ

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 130
© SIRSOFT
현재 페이지 제일 처음으로