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

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

從簡(jiǎn)單 HTTP 服務(wù)器中的每個(gè)文件中刪除 .html 擴(kuò)展名

從簡(jiǎn)單 HTTP 服務(wù)器中的每個(gè)文件中刪除 .html 擴(kuò)展名

Go
元芳怎么了 2023-07-10 14:23:01
我想做到這一點(diǎn),以便當(dāng)有人訪問我的 Go HTTP 服務(wù)器上的頁面時(shí),他們不會(huì)看到擴(kuò)展.html。例如,當(dāng)他們?cè)L問時(shí),https://example.org/test他們會(huì)看到 的內(nèi)容https://example.org/test.html。我的代碼:package mainimport (    "net/http")func main() {    fs := http.FileServer(http.Dir("public/"))    http.Handle("/", http.StripPrefix("/", fs))    http.ListenAndServe(":8000", nil)}
查看完整描述

3 回答

?
冉冉說

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

一種選擇是使用http.Dir實(shí)現(xiàn)http.FileSystem。這種方法的優(yōu)點(diǎn)是它利用了 http.FileServer 中精心編寫的代碼。

它看起來像這樣:

type HTMLDir struct {

? ? d http.Dir

}


func main() {

? fs := http.FileServer(HTMLDir{http.Dir("public/")})

? http.Handle("/", http.StripPrefix("/", fs))

? http.ListenAndServe(":8000", nil)

}

Open方法的實(shí)現(xiàn)取決于應(yīng)用程序的需求。


如果您總是想附加 .html 擴(kuò)展名,請(qǐng)使用以下代碼:


func (d HTMLDir) Open(name string) (http.File, error) {

? ? return d.d.Open(name + ".html")

}

如果您想回退到 .html 擴(kuò)展名,請(qǐng)使用以下代碼:


func (d HTMLDir) Open(name string) (http.File, error) {

? ? // Try name as supplied

? ? f, err := d.d.Open(name)

? ? if os.IsNotExist(err) {

? ? ? ? // Not found, try with .html

? ? ? ? if f, err := d.d.Open(name + ".html"); err == nil {

? ? ? ? ? ? return f, nil

? ? ? ? }

? ? }

? ? return f, err

}

將前一個(gè)翻轉(zhuǎn)過來,以 .html 擴(kuò)展名開始,然后回退到所提供的名稱:


func (d HTMLDir) Open(name string) (http.File, error) {

? ? // Try name with added extension

? ? f, err := d.d.Open(name + ".html")

? ? if os.IsNotExist(err) {

? ? ? ? // Not found, try again with name as supplied.

? ? ? ? if f, err := d.d.Open(name); err == nil {

? ? ? ? ? ? return f, nil

? ? ? ? }

? ? }

? ? return f, err

}


查看完整回答
反對(duì) 回復(fù) 2023-07-10
?
滄海一幻覺

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

因此,基本上您需要該http.FileServer功能,但不希望客戶端必須輸入尾隨.html擴(kuò)展名。


另一個(gè)簡(jiǎn)單的解決方案是在服務(wù)器端自行添加??梢赃@樣做:


fs := http.FileServer(http.Dir("public"))

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

    r.URL.Path += ".html"

    fs.ServeHTTP(w, r)

})


panic(http.ListenAndServe(":8000", nil))

就這樣。


如果您希望此文件服務(wù)器還提供其他文件(例如圖像和 CSS 文件),則僅.html在沒有擴(kuò)展名的情況下附加擴(kuò)展名:


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

    if ext := path.Ext(r.URL.Path); ext == "" {

        r.URL.Path += ".html"

    }

    fs.ServeHTTP(w, r)

})



查看完整回答
反對(duì) 回復(fù) 2023-07-10
?
翻翻過去那場(chǎng)雪

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

這是可能的,但不能通過使用http.FileServer().


相反,為該/路由創(chuàng)建一個(gè)自定義處理程序。在處理程序內(nèi)部,使用 直接提供請(qǐng)求的文件http.ServeFile()。


viewPath := "public/"

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


    // hack, if requested url is / then point towards /index

    if r.URL.Path == "/" {

        r.URL.Path = "/index"

    }


    requestedPath := strings.TrimLeft(filepath.Clean(r.URL.Path), "/")

    filename := fmt.Sprintf("%s/%s.html", viewPath, requestedPath)

    http.ServeFile(w, r, filename)

}))

http.ListenAndServe(":8000", nil)

該.html后綴被添加到每個(gè)請(qǐng)求路徑中,因此它將正確指向 html 文件。


path / -> ./public/index.html

path /index -> ./public/index.html

path /some/folder/about -> ./public/some/folder/about.html

...


查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 3 回答
  • 0 關(guān)注
  • 207 瀏覽

添加回答

舉報(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)