Software / code / prosody
Comparison
plugins/mod_http.lua @ 6504:e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 04 Nov 2014 17:48:17 +0100 |
| parent | 6086:3b4fde51fa25 |
| child | 6530:35ebcb733c4c |
comparison
equal
deleted
inserted
replaced
| 6503:8437058c4226 | 6504:e1659f32852e |
|---|---|
| 41 local function get_base_path(host_module, app_name, default_app_path) | 41 local function get_base_path(host_module, app_name, default_app_path) |
| 42 return (normalize_path(host_module:get_option("http_paths", {})[app_name] -- Host | 42 return (normalize_path(host_module:get_option("http_paths", {})[app_name] -- Host |
| 43 or module:get_option("http_paths", {})[app_name] -- Global | 43 or module:get_option("http_paths", {})[app_name] -- Global |
| 44 or default_app_path)) -- Default | 44 or default_app_path)) -- Default |
| 45 :gsub("%$(%w+)", { host = host_module.host }); | 45 :gsub("%$(%w+)", { host = host_module.host }); |
| 46 end | |
| 47 | |
| 48 local function redir_handler(event) | |
| 49 event.response.headers.location = event.request.path.."/"; | |
| 50 return 301; | |
| 46 end | 51 end |
| 47 | 52 |
| 48 local ports_by_scheme = { http = 80, https = 443, }; | 53 local ports_by_scheme = { http = 80, https = 443, }; |
| 49 | 54 |
| 50 -- Helper to deduce a module's external URL | 55 -- Helper to deduce a module's external URL |
| 97 local _handler = handler; | 102 local _handler = handler; |
| 98 handler = function (event) | 103 handler = function (event) |
| 99 local path = event.request.path:sub(base_path_len); | 104 local path = event.request.path:sub(base_path_len); |
| 100 return _handler(event, path); | 105 return _handler(event, path); |
| 101 end; | 106 end; |
| 107 module:hook_object_event(server, event_name:sub(1, -3), redir_handler, -1); | |
| 108 elseif event_name:sub(-1, -1) == "/" then | |
| 109 module:hook_object_event(server, event_name:sub(1, -2), redir_handler, -1); | |
| 102 end | 110 end |
| 103 if not app_handlers[event_name] then | 111 if not app_handlers[event_name] then |
| 104 app_handlers[event_name] = handler; | 112 app_handlers[event_name] = handler; |
| 105 module:hook_object_event(server, event_name, handler); | 113 module:hook_object_event(server, event_name, handler); |
| 106 else | 114 else |