第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 Go 中使用虛擬主機(jī)功能服務(wù)靜態(tài)文件

如何在 Go 中使用虛擬主機(jī)功能服務(wù)靜態(tài)文件

Go
波斯汪 2022-12-19 21:12:45
如何FileServer在 Go 中為虛擬主機(jī)提供靜態(tài)文件(帶有 )?如果我有自己的處理函數(shù),任務(wù)似乎很容易解決 [ 1 ]:package mainimport (    "fmt"    "net/http")func main() {    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintf(w, "Hello, world!")    })    http.HandleFunc("qa.example.com/", func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintf(w, "Hello, improved world!")    })    http.ListenAndServe(":8080", nil)}但是,如果我需要為FileServer虛擬主機(jī)提供靜態(tài)文件(帶有 )怎么辦?這個(gè)r.PathPrefix("qa.example.com/").Handler(http.FileServer(http.Dir("/static/qa/")))不起作用——它只是被忽略了。我究竟做錯(cuò)了什么?這種方法通常是錯(cuò)誤的嗎?
查看完整描述

2 回答

?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊

package main


import (

    "embed"

    "fmt"

    "net/http"

    "strings"

    "time"

)


//go:embed *.go

var f embed.FS


func main() {

    // embed.Fs defaule modtime use now or env value.

    now := time.Now()

    // use mapping host to http.FileSystem

    vhosts := make(map[string]http.FileSystem)

    vhosts["qa.example.com"] = http.FS(f)    // from embed.FS

    vhosts["my.example.com"] = http.Dir(".") // from http.Dir


    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        fmt.Fprintf(w, "Hello, world!")

    })

    http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {

        // find host

        fs, ok := vhosts[r.Host]

        if !ok {

            w.WriteHeader(404)

            w.Write([]byte("404 not found vhost"))

            return

        }

        // open file from http.FileSystem

        file, err := fs.Open(strings.TrimPrefix(r.URL.Path, "/static/"))

        if err != nil {

            // reference go1.18.3/net/http/fs.go toHTTPError function hander file error.

            w.Write([]byte("check err is 403 or 404 or 500"))

            return

        }

        stat, _ := file.Stat()

        // fix embed modtime is zero.

        modtime := stat.ModTime()

        if modtime.IsZero() {

            modtime = now

        }

        // response

        http.ServeContent(w, r, stat.Name(), modtime, file)


    })


    http.ListenAndServe(":8080", nil)

}

運(yùn)行 test exec 命令curl -H "Host: my.example.com" 127.0.0.1:8080/static/01.go,01.go 替換您的靜態(tài)文件名。


查看完整回答
反對(duì) 回復(fù) 2022-12-19
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

為 注冊(cè)處理程序host/path/path僅在調(diào)用文件處理程序時(shí)剝離該部分。

此注冊(cè)為qa.example.com/static/*目錄中的文件提供服務(wù)./static/qa/。

http.HandleFunc("qa.example.com/static/", http.StripPrefix("/static", http.FileServer(http.Dir("./static/qa/")))



查看完整回答
反對(duì) 回復(fù) 2022-12-19
  • 2 回答
  • 0 關(guān)注
  • 114 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)