채택완료

Caddy 2 전용 그누보드 5.4 짧은주소 rewrite 정규식 문의드립니다.

2020-07-10 (금) 13:18:18 2,754

그누보드 5.4는 짧은주소 기능을 지원하고 있습니다.

아파치와 Nginx, 오픈라이트스피드 웹서버에서는 완벽하게 작동하고 있습니다.

하지만 Caddy 2 웹서버에서는 작동하지 않습니다.

왜냐하면 

https://caddyserver.com/docs/caddyfile/directives/rewrite

https://caddyserver.com/docs/caddyfile/matchers

위와 같이 문법이 다르기 때문입니다.

우선 아파치와 Nginx의 리라이트 규칙을 봅시다.

Copy
#### gnuboard5 apache rewrite BEGIN #####
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^content/([0-9a-zA-Z_]+)$  bbs/content.php?co_id=$1&rewrite=1  [QSA,L]
RewriteRule ^content/([^/]+)/$  bbs/content.php?co_seo_title=$1&rewrite=1      [QSA,L]
RewriteRule ^rss/([0-9a-zA-Z_]+)$  bbs/rss.php?bo_table=$1        [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)$  bbs/board.php?bo_table=$1&rewrite=1      [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1      [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/write$  bbs/write.php?bo_table=$1&rewrite=1    [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$  bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1  [QSA,L]
</IfModule>
#### gnuboard5 rewrite END #####

#### gnuboard5 nginx rules BEGIN #####
if (!-e $request_filename){
rewrite ^/content/([0-9a-zA-Z_]+)$ /bbs/content.php?co_id=$1&rewrite=1 break;
rewrite ^/content/([^/]+)/$ /bbs/content.php?co_seo_title=$1&rewrite=1 break;
rewrite ^/rss/([0-9a-zA-Z_]+)$ /bbs/rss.php?bo_table=$1 break;
rewrite ^/([0-9a-zA-Z_]+)$ /bbs/board.php?bo_table=$1&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/write$ /bbs/write.php?bo_table=$1&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/([^/]+)/$ /bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;
}
#### gnuboard5 nginx rules END #####

위 리라이트 규칙은 그누보드 관리자화면에서도 확인할 수 있습니다.

그래서 Caddy 2용으로 변경하기 위해 캐디 2 커뮤니티에 질문을 올려서 답변을 얻었습니다.

https://caddy.community/t/rewrite-apache-nginx-rewrite-block-to-caddy-for-gnuboard-5-4/9009

추가로 @마젠토 님의 도움으로 새글작성까지 문제없이 적용완료했습니다.

Copy
# gnuboard rewrite rules
@content path_regexp content ^/content/([0-9a-zA-Z_]+)$
rewrite @content /bbs/content.php?co_id={re.content.1}&rewrite=1

@title path_regexp title ^/content/([^/]+)/$
rewrite @title /bbs/content.php?co_seo_title={re.title.1}&rewrite=1

@rss path_regexp rss ^rss/([0-9a-zA-Z_]+)$
rewrite @rss /bbs/rss.php?bo_table={re.rss.1}

@board path_regexp board ^/([0-9a-zA-Z_]+)$
rewrite @board /bbs/board.php?bo_table={re.board.1}&rewrite=1

@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&rewrite=1

@seo path_regexp seo ^/([0-9a-zA-Z_]+)/([^/]+)/$
rewrite @seo /bbs/board.php?bo_table={re.seo.1}&wr_seo_title={re.seo.2}&rewrite=1

@id path_regexp id ^/([0-9a-zA-Z_]+)/([0-9]+)$
rewrite @id /bbs/board.php?bo_table={re.id.1}&wr_id={re.id.2}&rewrite=1


현재 이렇게 설정했습니다.



1. 되는 것

짧은 주소 게시판 바로가기(숫자, 한글표시 그대로)
짧은 주소 게시글 바로가기(숫자, 한글표시 그대로)
짧은 주소 내용관리 바로가기(숫자, 한글표시 그대로)
/bbs/content.php?co_seo_title 형태 연결 (내용관리 SEO 제목 연결)
/bbs/board.php?bo_table=$1&wr_seo_title= (게시판 SEO 제목 연결)
/bbs/rss.php?bo_table 형태 연결 (RSS 게시판 제목 연결)
짧은 주소 글쓰기 - 게시판 목록에서 글쓰기 버튼 누르면 새글쓰기 잘 됨

2. 안되는 것

짧은 주소 설정시 - 글 수정 버튼을 누르면 새글쓰기로 됨

---

이제 마지막 관문입니다. 글 수정 버튼을 눌렀을 때 실제로 수정이 되어야합니다.

문제의 코드는 

Copy
@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&rewrite=1

이것인데요.

https://example.com/free/write?w=u&wr_id=28&page=

위와 같은 규칙으로 들어왔을 때

https://example.com/bbs/write.php?w=u&bo_table=free&wr_id=28&page=

위와 같이 변환이 되어야 합니다.

하지만 그렇게 되지 않고, 새글 작성으로 넘어가더라구요.

아무래도 ?w=u&bo_table=free&wr_id=28&page= 이 부분이 무시되는 것 같습니다.

이것만 잡으면 Caddy 2용 리라이트 규칙을 완성할 수 있습니다.

도와주세요!

답변 1개 / 댓글 1개

채택된 답변
+20 포인트

@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&{http.request.uri.query}

답변에 대한 댓글 1개

대박입니다. 잘 되네요!!!!!!!!! 대박!!!!!

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