From 8160517d969b7a41ec119bf30dce4b70658d042e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Sun, 23 May 2021 17:01:13 +0800 Subject: [PATCH] =?UTF-8?q?URL=E8=B7=B3=E8=BD=AC=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http_host_redirect_config.go | 26 ++++++++++++++--- .../http_host_redirect_config_test.go | 29 +++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 pkg/serverconfigs/http_host_redirect_config_test.go diff --git a/pkg/serverconfigs/http_host_redirect_config.go b/pkg/serverconfigs/http_host_redirect_config.go index 7ffa0cd..44138ab 100644 --- a/pkg/serverconfigs/http_host_redirect_config.go +++ b/pkg/serverconfigs/http_host_redirect_config.go @@ -1,8 +1,11 @@ package serverconfigs -import "net/url" +import ( + "net/url" + "regexp" +) -// 主机名跳转设置 +// HTTPHostRedirectConfig 主机名跳转设置 type HTTPHostRedirectConfig struct { IsOn bool `yaml:"isOn" json:"isOn"` // 是否开启 Status int `yaml:"status" json:"status"` // 跳转用的状态码 @@ -11,13 +14,16 @@ type HTTPHostRedirectConfig struct { AfterURL string `yaml:"afterURL" json:"afterURL"` // 跳转后的地址 MatchPrefix bool `yaml:"matchPrefix" json:"matchPrefix"` // 只匹配前缀部分 + MatchRegexp bool `yaml:"matchRegexp" json:"matchRegexp"` // 匹配正则表达式 KeepRequestURI bool `yaml:"keepRequestURI" json:"keepRequestURI"` // 保留请求URI - realBeforeURL string + realBeforeURL string + beforeURLRegexp *regexp.Regexp } +// Init 初始化 func (this *HTTPHostRedirectConfig) Init() error { - { + if !this.MatchRegexp { u, err := url.Parse(this.BeforeURL) if err != nil { return err @@ -27,11 +33,23 @@ func (this *HTTPHostRedirectConfig) Init() error { } else { this.realBeforeURL = this.BeforeURL } + } else if this.MatchRegexp { + reg, err := regexp.Compile(this.BeforeURL) + if err != nil { + return err + } + this.beforeURLRegexp = reg } return nil } +// RealBeforeURL 跳转前URL func (this *HTTPHostRedirectConfig) RealBeforeURL() string { return this.realBeforeURL } + +// BeforeURLRegexp 跳转前URL正则表达式 +func (this *HTTPHostRedirectConfig) BeforeURLRegexp() *regexp.Regexp { + return this.beforeURLRegexp +} diff --git a/pkg/serverconfigs/http_host_redirect_config_test.go b/pkg/serverconfigs/http_host_redirect_config_test.go new file mode 100644 index 0000000..24b5b41 --- /dev/null +++ b/pkg/serverconfigs/http_host_redirect_config_test.go @@ -0,0 +1,29 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package serverconfigs + +import "testing" + +func TestHTTPHostRedirectConfig_Init_Regexp(t *testing.T) { + { + config := &HTTPHostRedirectConfig{ + BeforeURL: "http://teaos.cn", + MatchRegexp: true, + } + err := config.Init() + if err != nil { + t.Fatal(err) + } + } + + { + config := &HTTPHostRedirectConfig{ + BeforeURL: `http://(\w+).cn`, + MatchRegexp: true, + } + err := config.Init() + if err != nil { + t.Fatal(err) + } + } +}