25 lines
412 B
Go
25 lines
412 B
Go
package handler
|
|
|
|
import "strings"
|
|
|
|
func cleanURLLike(p string) string {
|
|
p = strings.TrimSpace(p)
|
|
if p == "" || p == "/" {
|
|
return "/"
|
|
}
|
|
parts := []string{}
|
|
for seg := range strings.SplitSeq(p, "/") {
|
|
switch seg {
|
|
case "", ".":
|
|
continue
|
|
case "..":
|
|
if len(parts) > 0 {
|
|
parts = parts[:len(parts)-1]
|
|
}
|
|
default:
|
|
parts = append(parts, seg)
|
|
}
|
|
}
|
|
return "/" + strings.Join(parts, "/")
|
|
}
|