1
0
Fork 0
forked from github/pelican

Adjust suffix in server to allow redirection when needed

Folders without index.html has to be redirected (/foo -> /foo/) for
directory listing to work properly. Skip '/' suffix if original path
does not have it so that base class can return a redirect.
This commit is contained in:
Deniz Turgut 2021-10-05 01:39:35 +03:00
commit 2d97a45902
No known key found for this signature in database
GPG key ID: 87B7168D7AB3ED2F
2 changed files with 10 additions and 1 deletions

View file

@ -75,10 +75,15 @@ class ComplexHTTPRequestHandler(server.SimpleHTTPRequestHandler):
def get_path_that_exists(self, original_path):
# Try to strip trailing slash
trailing_slash = original_path.endswith('/')
original_path = original_path.rstrip('/')
# Try to detect file by applying various suffixes
tries = []
for suffix in self.SUFFIXES:
if not trailing_slash and suffix == '/':
# if original request does not have trailing slash, skip the '/' suffix
# so that base class can redirect if needed
continue
path = original_path + suffix
if os.path.exists(self.translate_path(path)):
return path

View file

@ -43,14 +43,18 @@ class TestServer(unittest.TestCase):
os.mkdir(os.path.join(self.temp_output, 'baz'))
for suffix in ['', '/']:
# foo.html has precedence over foo/index.html
path = handler.get_path_that_exists('foo' + suffix)
self.assertEqual(path, 'foo.html')
# folder with index.html should return folder/index.html
path = handler.get_path_that_exists('bar' + suffix)
self.assertEqual(path, 'bar/index.html')
# folder without index.html should return same as input
path = handler.get_path_that_exists('baz' + suffix)
self.assertEqual(path, 'baz/')
self.assertEqual(path, 'baz' + suffix)
# not existing path should return None
path = handler.get_path_that_exists('quux' + suffix)
self.assertIsNone(path)