diff --git a/pelican/server.py b/pelican/server.py index 6ebce876..317761c9 100644 --- a/pelican/server.py +++ b/pelican/server.py @@ -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 diff --git a/pelican/tests/test_server.py b/pelican/tests/test_server.py index 307a3e10..9af030f8 100644 --- a/pelican/tests/test_server.py +++ b/pelican/tests/test_server.py @@ -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)