@@ -63,7 +63,7 @@ func VirtualService(spec *VirtualServiceSpec) *istioclientnetworking.VirtualServ
6363 })
6464 }
6565
66- httpRoutes := []* istionetworking.HTTPRoute {}
66+ var httpRoutes []* istionetworking.HTTPRoute
6767
6868 if spec .ExactPath != nil {
6969 httpRoutes = append (httpRoutes , & istionetworking.HTTPRoute {
@@ -77,12 +77,15 @@ func VirtualService(spec *VirtualServiceSpec) *istioclientnetworking.VirtualServ
7777 },
7878 },
7979 Route : destinations ,
80- Rewrite : & istionetworking.HTTPRewrite {
81- Uri : urls .CanonicalizeEndpoint (* spec .Rewrite ),
82- },
8380 })
81+
82+ if spec .Rewrite != nil {
83+ httpRoutes [0 ].Rewrite = & istionetworking.HTTPRewrite {
84+ Uri : urls .CanonicalizeEndpoint (* spec .Rewrite ),
85+ }
86+ }
8487 } else {
85- httpRoutes = append ( httpRoutes , & istionetworking.HTTPRoute {
88+ exactMatch := & istionetworking.HTTPRoute {
8689 Match : []* istionetworking.HTTPMatchRequest {
8790 {
8891 Uri : & istionetworking.StringMatch {
@@ -93,10 +96,9 @@ func VirtualService(spec *VirtualServiceSpec) *istioclientnetworking.VirtualServ
9396 },
9497 },
9598 Route : destinations ,
96- Rewrite : & istionetworking.HTTPRewrite {
97- Uri : urls .CanonicalizeEndpoint (* spec .Rewrite ),
98- },
99- }, & istionetworking.HTTPRoute {
99+ }
100+
101+ prefixMatch := & istionetworking.HTTPRoute {
100102 Match : []* istionetworking.HTTPMatchRequest {
101103 {
102104 Uri : & istionetworking.StringMatch {
@@ -107,10 +109,19 @@ func VirtualService(spec *VirtualServiceSpec) *istioclientnetworking.VirtualServ
107109 },
108110 },
109111 Route : destinations ,
110- Rewrite : & istionetworking.HTTPRewrite {
112+ }
113+
114+ if spec .Rewrite != nil {
115+ exactMatch .Rewrite = & istionetworking.HTTPRewrite {
116+ Uri : urls .CanonicalizeEndpoint (* spec .Rewrite ),
117+ }
118+
119+ prefixMatch .Rewrite = & istionetworking.HTTPRewrite {
111120 Uri : urls .CanonicalizeEndpoint (* spec .Rewrite ) + "/" ,
112- },
113- })
121+ }
122+ }
123+
124+ httpRoutes = append (httpRoutes , exactMatch , prefixMatch )
114125 }
115126
116127 virtualService := & istioclientnetworking.VirtualService {
0 commit comments