github.com/TeaOSLab/EdgeNode@v1.3.8/internal/nodes/http_request_rewrite.go (about)

     1  package nodes
     2  
     3  import (
     4  	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
     5  	"net/http"
     6  )
     7  
     8  // 调用Rewrite
     9  func (this *HTTPRequest) doRewrite() (shouldShop bool) {
    10  	if this.rewriteRule == nil {
    11  		return
    12  	}
    13  
    14  	// 代理
    15  	if this.rewriteRule.Mode == serverconfigs.HTTPRewriteModeProxy {
    16  		// 外部URL
    17  		if this.rewriteIsExternalURL {
    18  			host := this.ReqHost
    19  			if len(this.rewriteRule.ProxyHost) > 0 {
    20  				host = this.rewriteRule.ProxyHost
    21  			}
    22  			this.doURL(this.RawReq.Method, this.rewriteReplace, host, 0, false)
    23  			return true
    24  		}
    25  
    26  		// 内部URL继续
    27  		return false
    28  	}
    29  
    30  	// 跳转
    31  	if this.rewriteRule.Mode == serverconfigs.HTTPRewriteModeRedirect {
    32  		if this.rewriteRule.RedirectStatus > 0 {
    33  			this.ProcessResponseHeaders(this.writer.Header(), this.rewriteRule.RedirectStatus)
    34  			httpRedirect(this.writer, this.RawReq, this.rewriteReplace, this.rewriteRule.RedirectStatus)
    35  		} else {
    36  			this.ProcessResponseHeaders(this.writer.Header(), http.StatusTemporaryRedirect)
    37  			httpRedirect(this.writer, this.RawReq, this.rewriteReplace, http.StatusTemporaryRedirect)
    38  		}
    39  		return true
    40  	}
    41  
    42  	return true
    43  }