diff --git a/lib/jekyll/commands/serve.rb b/lib/jekyll/commands/serve.rb index 6467c5ab..111d6709 100644 --- a/lib/jekyll/commands/serve.rb +++ b/lib/jekyll/commands/serve.rb @@ -40,7 +40,7 @@ module Jekyll s.mount( options['baseurl'], - WEBrick::HTTPServlet::FileHandler, + custom_file_handler, destination, file_handler_options ) @@ -99,6 +99,21 @@ module Jekyll opts end + # Custom WEBrick FileHandler servlet for serving "/file.html" at "/file" + # when no exact match is found. This mirrors the behavior of GitHub + # Pages and many static web server configs. + def custom_file_handler + Class.new WEBrick::HTTPServlet::FileHandler do + def search_file(req, res, basename) + if file = super + file + else + super(req, res, "#{basename}.html") + end + end + end + end + def start_callback(detached) unless detached Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }