You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gorilla/Mux服务器路径含连续斜杠返回404问题求助

Gorilla Mux 路由适配问题:支持空路径参数的请求

我用Gorilla Mux编写了以下Web服务器代码:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func FooHandler(w http.ResponseWriter, r *http.Request) {

    vars := mux.Vars(r)

    pathVal := vars["item"]

    fmt.Printf("\n item :: %s \n", pathVal)

    w.Write([]byte("Gorilla!\n"))
}

func main() {
    router := mux.NewRouter()

    routes := router.PathPrefix("/{item}").Subrouter()

    routes.Methods(http.MethodGet).
        Path("/foo").
        HandlerFunc(FooHandler)

    log.Fatal(http.ListenAndServe(":8000", router))
}

当前正常场景:向127.0.0.1:8000/itemvalue/foo发送请求时,能正常进入FooHandler,且pathVal可获取到正确的itemvalue值。

需求:希望127.0.0.1:8000//foo这类请求(URL中item位置为空字符串,存在连续斜杠)也能正常工作——请求进入FooHandler,且pathVal为空字符串。但目前这类请求返回404 page not found,无法进入处理函数。

我尝试过修改路径前缀为routes := router.PathPrefix("/{item:^$|.+}").Subrouter(),期望正则匹配空字符串或任意字符串,但仍然出现404错误。


解决方法

问题根源有两点:

  1. Gorilla Mux默认会清理路径中的连续斜杠,把//foo处理成/foo,导致无法匹配带空参数的路由规则;
  2. 默认的{item}匹配规则仅匹配非空路径段,不支持空字符串。

按以下步骤修改代码即可解决:

  1. 初始化路由时开启SkipClean选项,禁止mux清理路径中的连续斜杠:
router := mux.NewRouter().SkipClean(true)
  1. 修改PathPrefix的匹配规则,让{item}可以匹配空字符串或任意字符:
routes := router.PathPrefix("/{item:.*}").Subrouter()

修改后的完整代码:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func FooHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    pathVal := vars["item"]
    fmt.Printf("\n item :: '%s' \n", pathVal) // 带引号打印,方便确认空字符串
    w.Write([]byte("Gorilla!\n"))
}

func main() {
    router := mux.NewRouter().SkipClean(true) // 禁用路径清理

    routes := router.PathPrefix("/{item:.*}").Subrouter() // 支持空字符串匹配

    routes.Methods(http.MethodGet).
        Path("/foo").
        HandlerFunc(FooHandler)

    log.Fatal(http.ListenAndServe(":8000", router))
}

验证效果

  • 请求127.0.0.1:8000/itemvalue/foo:pathVal为itemvalue,正常响应;
  • 请求127.0.0.1:8000//foo:pathVal为空字符串,正常进入FooHandler并返回响应。

内容的提问来源于stack exchange,提问作者TypeAny Word

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:05:10