http.server directories named index.html break directory listings · Issue #100474 · python/cpython (original) (raw)

Bug report

If you have a directory called index.html or index.htm within a directory (any name in SimpleHTTPRequestHandler.index_pages), it causes http.server to return a 404 Not Found error instead of the directory listing. This comes about due to not checking that the index is a regular file when it checks for its presence. The 404 error comes from the call to open() the directory raising an OSError.

To reproduce create a folder structure like below and run python3 -m http.server -d foo. You will get a 404 error rather than a directory listing.

foo/
foo/
├── bar
└── index.html/
    └── baz

Your environment

Linked PRs