mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-31 14:26:06 +03:00
staticfiles: fix handling of filenames that end with index file names (#1812)
* static files ending with an index were redirected improperly * optimize requestPage
This commit is contained in:
parent
bd67ec99f0
commit
4e52b3fe8a
2 changed files with 11 additions and 1 deletions
|
@ -106,8 +106,9 @@ func (fs FileServer) serveFile(w http.ResponseWriter, r *http.Request) (int, err
|
||||||
|
|
||||||
// if an index file was explicitly requested, strip file name from the request
|
// if an index file was explicitly requested, strip file name from the request
|
||||||
// ("/foo/index.html" -> "/foo/")
|
// ("/foo/index.html" -> "/foo/")
|
||||||
|
var requestPage = path.Base(urlCopy.Path)
|
||||||
for _, indexPage := range IndexPages {
|
for _, indexPage := range IndexPages {
|
||||||
if strings.HasSuffix(urlCopy.Path, indexPage) {
|
if requestPage == indexPage {
|
||||||
urlCopy.Path = urlCopy.Path[:len(urlCopy.Path)-len(indexPage)]
|
urlCopy.Path = urlCopy.Path[:len(urlCopy.Path)-len(indexPage)]
|
||||||
redir = true
|
redir = true
|
||||||
break
|
break
|
||||||
|
|
|
@ -219,6 +219,13 @@ func TestServeHTTP(t *testing.T) {
|
||||||
expectedLocation: "https://foo/bar/file1.html",
|
expectedLocation: "https://foo/bar/file1.html",
|
||||||
expectedBodyContent: movedPermanently,
|
expectedBodyContent: movedPermanently,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
url: "https://foo/notindex.html",
|
||||||
|
expectedStatus: http.StatusOK,
|
||||||
|
expectedBodyContent: testFiles[webrootNotIndexHTML],
|
||||||
|
expectedEtag: `"2n9cm"`,
|
||||||
|
expectedContentLength: strconv.Itoa(len(testFiles[webrootNotIndexHTML])),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
|
@ -493,6 +500,7 @@ func TestServeHTTPFailingStat(t *testing.T) {
|
||||||
// Paths for the fake site used temporarily during testing.
|
// Paths for the fake site used temporarily during testing.
|
||||||
var (
|
var (
|
||||||
webrootFile1HTML = filepath.Join(webrootName, "file1.html")
|
webrootFile1HTML = filepath.Join(webrootName, "file1.html")
|
||||||
|
webrootNotIndexHTML = filepath.Join(webrootName, "notindex.html")
|
||||||
webrootDirFile2HTML = filepath.Join(webrootName, "dir", "file2.html")
|
webrootDirFile2HTML = filepath.Join(webrootName, "dir", "file2.html")
|
||||||
webrootDirHiddenHTML = filepath.Join(webrootName, "dir", "hidden.html")
|
webrootDirHiddenHTML = filepath.Join(webrootName, "dir", "hidden.html")
|
||||||
webrootDirwithindexIndeHTML = filepath.Join(webrootName, "dirwithindex", "index.html")
|
webrootDirwithindexIndeHTML = filepath.Join(webrootName, "dirwithindex", "index.html")
|
||||||
|
@ -519,6 +527,7 @@ var (
|
||||||
var testFiles = map[string]string{
|
var testFiles = map[string]string{
|
||||||
"unreachable.html": "<h1>must not leak</h1>",
|
"unreachable.html": "<h1>must not leak</h1>",
|
||||||
webrootFile1HTML: "<h1>file1.html</h1>",
|
webrootFile1HTML: "<h1>file1.html</h1>",
|
||||||
|
webrootNotIndexHTML: "<h1>notindex.html</h1>",
|
||||||
webrootDirFile2HTML: "<h1>dir/file2.html</h1>",
|
webrootDirFile2HTML: "<h1>dir/file2.html</h1>",
|
||||||
webrootDirwithindexIndeHTML: "<h1>dirwithindex/index.html</h1>",
|
webrootDirwithindexIndeHTML: "<h1>dirwithindex/index.html</h1>",
|
||||||
webrootDirHiddenHTML: "<h1>dir/hidden.html</h1>",
|
webrootDirHiddenHTML: "<h1>dir/hidden.html</h1>",
|
||||||
|
|
Loading…
Reference in a new issue