Caddy 2 전용 그누보드 5.4 짧은주소 rewrite 정규식 문의드립니다.
본문
그누보드 5.4는 짧은주소 기능을 지원하고 있습니다.
아파치와 Nginx, 오픈라이트스피드 웹서버에서는 완벽하게 작동하고 있습니다.
하지만 Caddy 2 웹서버에서는 작동하지 않습니다.
왜냐하면
https://caddyserver.com/docs/caddyfile/directives/rewrite
https://caddyserver.com/docs/caddyfile/matchers
위와 같이 문법이 다르기 때문입니다.
우선 아파치와 Nginx의 리라이트 규칙을 봅시다.
#### 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
추가로 @마젠토 님의 도움으로 새글작성까지 문제없이 적용완료했습니다.
# 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. 안되는 것
짧은 주소 설정시 - 글 수정 버튼을 누르면 새글쓰기로 됨
---
이제 마지막 관문입니다. 글 수정 버튼을 눌렀을 때 실제로 수정이 되어야합니다.
문제의 코드는
@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
@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&{http.request.uri.query}