mirror of
https://github.com/alibaba/higress.git
synced 2026-06-08 20:27:31 +08:00
more compatiable with nginx's rewrite (#636)
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
package annotations
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
networking "istio.io/api/networking/v1alpha3"
|
||||
"istio.io/istio/pilot/pkg/util/sets"
|
||||
listersv1 "k8s.io/client-go/listers/core/v1"
|
||||
@@ -73,8 +75,17 @@ type Ingress struct {
|
||||
Http2Rpc *Http2RpcConfig
|
||||
}
|
||||
|
||||
func (i *Ingress) NeedRegexMatch() bool {
|
||||
return i.Rewrite != nil && (i.IsPrefixRegexMatch() || i.IsFullPathRegexMatch())
|
||||
func (i *Ingress) NeedRegexMatch(path string) bool {
|
||||
if i.Rewrite == nil {
|
||||
return false
|
||||
}
|
||||
if strings.ContainsAny(path, `\.+*?()|[]{}^$`) {
|
||||
return true
|
||||
}
|
||||
if strings.ContainsAny(i.Rewrite.RewriteTarget, `$\`) {
|
||||
return true
|
||||
}
|
||||
return i.IsPrefixRegexMatch() || i.IsFullPathRegexMatch()
|
||||
}
|
||||
|
||||
func (i *Ingress) IsPrefixRegexMatch() bool {
|
||||
|
||||
@@ -18,8 +18,9 @@ import "testing"
|
||||
|
||||
func TestNeedRegexMatch(t *testing.T) {
|
||||
testCases := []struct {
|
||||
input *Ingress
|
||||
expect bool
|
||||
input *Ingress
|
||||
inputPath string
|
||||
expect bool
|
||||
}{
|
||||
{
|
||||
input: &Ingress{},
|
||||
@@ -47,12 +48,41 @@ func TestNeedRegexMatch(t *testing.T) {
|
||||
},
|
||||
expect: false,
|
||||
},
|
||||
{
|
||||
input: &Ingress{
|
||||
Rewrite: &RewriteConfig{
|
||||
UseRegex: false,
|
||||
RewriteTarget: "/$1",
|
||||
},
|
||||
},
|
||||
expect: true,
|
||||
},
|
||||
{
|
||||
input: &Ingress{
|
||||
Rewrite: &RewriteConfig{
|
||||
UseRegex: false,
|
||||
RewriteTarget: "/",
|
||||
},
|
||||
},
|
||||
inputPath: "/.*",
|
||||
expect: true,
|
||||
},
|
||||
{
|
||||
input: &Ingress{
|
||||
Rewrite: &RewriteConfig{
|
||||
UseRegex: false,
|
||||
RewriteTarget: "/",
|
||||
},
|
||||
},
|
||||
inputPath: "/",
|
||||
expect: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
t.Run("", func(t *testing.T) {
|
||||
if testCase.input.NeedRegexMatch() != testCase.expect {
|
||||
t.Fatalf("Should be %t, but actual is %t", testCase.expect, testCase.input.NeedRegexMatch())
|
||||
if testCase.input.NeedRegexMatch(testCase.inputPath) != testCase.expect {
|
||||
t.Fatalf("Should be %t, but actual is %t", testCase.expect, !testCase.expect)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user