亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重定向靜態文件請求

重定向靜態文件請求

Go
胡說叔叔 2021-12-27 17:04:55
我正在嘗試提供一個靜態 html 文件,該文件具有指向其他資源的腳本標記。我想從一個目錄提供 html 文件,然后將資產請求重定向到另一個目錄。這就是我現在設置的方式:// server.goimport (    "fmt"    "html/template"    "log"    "net/http"    "path"    "time")func handle(w http.ResponseWriter, r *http.Request) {    lp := path.Join("./", "index.html")    fmt.Println(lp)    tmpl, err := template.ParseFiles(lp)    if err != nil {        log.Fatal(err)    }    tmpl.ExecuteTemplate(w, "index", nil)}func main() {    fs := http.FileServer(http.Dir("../../app_assets/"))    http.Handle("/assets", fs)    http.HandleFunc("/static/", handle)    fmt.Println("Go Server listening on port 8000")    http.ListenAndServe(":8000", nil)}這是我的模板:<!-- index.html -->{{define "index"}}<!doctype html><html><head><meta charset="utf-8" /><link rel="stylesheet" href="assets/css/libs.css" type="text/css" /></head><body><script type="text/javascript" src="assets/js/libs.js"></script><h1> Hello </h1></body></html>{{end}}我可以從 提供索引文件localhost:8000/static/,但是資產請求不會發送到資產文件夾上兩級 ( ../../)。我究竟做錯了什么?筆記:加載 libs.js 時,我在控制臺中收到此錯誤:Uncaught SyntaxError: Unexpected token <這讓我相信對libs.js文件的請求正在被重定向到 html 標記。這是怎么回事?筆記2:當我瀏覽 請求的結果時libs.js,我看到了 html 標記。即使StripPrefix按照以下建議使用后。我究竟做錯了什么?
查看完整描述

2 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

在您的 html 中,當您指定srccss 和 js的屬性時,您擁有src="assets/js/libs.js". 這使得這些文件相對于當前路徑被請求。所以請求轉到http://localhost:8000/static/assets/js/libs.js.


由于它具有/static前綴,它將由您的/static處理程序處理,因此提供 html 文件。


要使其轉到/assets處理程序,請指定src帶有/前綴的 。


<script type="text/javascript" src="/assets/js/libs.js"></script>

現在服務器將在../../app_assets/assets/js/libs.js.


如果你想要它../../app_assets/js/libs.js,你可以使用StripPrefixassets從服務器中的 url 中取出部分。


fs := http.StripPrefix("/assets/", http.FileServer(http.Dir("../../app_assets/")))

http.Handle("/assets/", fs)


查看完整回答
反對 回復 2021-12-27
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

所以,我知道這是一個有點混亂,但你想改變fs := http.FileServer(http.Dir("../../assets/"))是fs := http.FileServer(http.Dir("../.."))


原因是請求中已經指定了“assets”的路徑,因此您擁有它,它實際上指向 ../../assets/assets/*


希望有幫助!


哦,只是為了防止另一個錯誤, Handle() 函數應該在路徑中寫一個斜杠。我差點忘了抓住那個。


編輯


要根據您的其他需要(使用某種重定向)調整我的答案,您必須使用http.StripPrefix處理程序https://golang.org/pkg/net/http/#StripPrefix


對于您的用例,您將使用以下代碼準備服務器:


fs := http.FileServer(http.Dir("../../app_assets"))

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

這使您可以為文件系統服務進行 url 重寫。


查看完整回答
反對 回復 2021-12-27
  • 2 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號