mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-31 02:27:19 -04: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
					
				| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user