首頁 >後端開發 >Golang >如何在 GoLang 中重定向前端路由以避免 404 錯誤?

如何在 GoLang 中重定向前端路由以避免 404 錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-20 18:17:10852瀏覽

How to Redirect Frontend Routes in GoLang to Avoid 404 Errors?

將GoLang 重新導向至前端路由

問題描述

直接在瀏覽器中存取「/my_frontend_path」等路徑時,GoLang 會回到404 錯誤將路由委託給前端React router.

問題分析

首要問題是在React router初始化之前訪問此類路徑時,伺服器處理請求並傳回錯誤。

單-伺服器解決方案

可以實作簡單的伺服器端「包羅萬象」方法,將所有不支援的路徑重新導向到前端路由器。如果請求的檔案不存在,此方法的工作原理是返回index.html頁面,從而允許React路由器處理路由。

程式碼實作

const FSPATH = "./build/"

func main() {
    fs := http.FileServer(http.Dir(FSPATH))

    http.HandleFunc("/my_api", func(w http.ResponseWriter, _ *http.Request) {
        w.Write([]byte("API CALL"))
    })

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // If requested file exists, return it; otherwise, return index.html
        if r.URL.Path != "/" {
            fullPath := FSPATH + strings.TrimPrefix(path.Clean(r.URL.Path), "/")
            _, err := os.Stat(fullPath)
            if err != nil {
                if !os.IsNotExist(err) {
                    panic(err)
                }

                // Requested file does not exist, return index.html
                r.URL.Path = "/"
            }
        }
        fs.ServeHTTP(w, r)
    })

    http.ListenAndServe(":8090", nil)
}

在此實作中:

  • 檢查請求的檔案是否存在。
  • 如果不存在(例如“/my_frontend_path”),請求將被重定向到index.html。
  • index.html 中的 React 路由器會處理「/my_frontend_path」路由。

注意

此方法會為不存在的檔案傳回index.html,這可能會導致「favicon.ico」等檔案出現問題。在這種情況下,可以添加額外的檢查以將重定向限制為僅特定擴展名。

以上是如何在 GoLang 中重定向前端路由以避免 404 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn