From 9cb97dd62dd6813e5bafa0b2e0eba13f1924607b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 14 Jan 2013 16:40:43 +0100 Subject: [PATCH] php-fallback --- plugins/php/php_plugin.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/plugins/php/php_plugin.c b/plugins/php/php_plugin.c index 5573449b..1c16b3bc 100644 --- a/plugins/php/php_plugin.c +++ b/plugins/php/php_plugin.c @@ -27,6 +27,7 @@ struct uwsgi_php { char *docroot; char *app; char *app_qs; + char *fallback; size_t ini_size; int dump_config; char *server_software; @@ -53,6 +54,7 @@ struct uwsgi_option uwsgi_php_options[] = { {"php-server-software", required_argument, 0, "force php SERVER_SOFTWARE", uwsgi_opt_set_str, &uphp.server_software, 0}, {"php-app", required_argument, 0, "force the php file to run at each request", uwsgi_opt_set_str, &uphp.app, 0}, {"php-app-qs", required_argument, 0, "when in app mode force QUERY_STRING to the specified value + REQUEST_URI", uwsgi_opt_set_str, &uphp.app_qs, 0}, + {"php-fallback", required_argument, 0, "run the specified php script when the request one does not exist", uwsgi_opt_set_str, &uphp.fallback, 0}, {"php-app-bypass", required_argument, 0, "if the regexp matches the uri the --php-app is bypassed", uwsgi_opt_add_regexp_list, &uphp.app_bypass, 0}, {"php-var", required_argument, 0, "add/overwrite a CGI variable at each request", uwsgi_opt_add_string_list, &uphp.vars, 0}, {"php-dump-config", no_argument, 0, "dump php config (if modified via --php-set or append options)", uwsgi_opt_true, &uphp.dump_config, 0}, @@ -730,7 +732,6 @@ int uwsgi_php_walk(struct wsgi_request *wsgi_req, char *full_path, char *docroot *(dst+part_size-1) = 0; if (stat(full_path, &st)) { - uwsgi_php_404(wsgi_req); return -1; } @@ -740,7 +741,6 @@ int uwsgi_php_walk(struct wsgi_request *wsgi_req, char *full_path, char *docroot if (i < (wsgi_req->path_info_len)-1) { *path_info = ptr + i; } - return 0; } @@ -847,9 +847,16 @@ oldstyle: if (uwsgi_php_walk(wsgi_req, filename, wsgi_req->document_root, wsgi_req->document_root_len, &path_info)) { free(filename); - return -1; + if (uphp.fallback) { + filename = uwsgi_str(uphp.fallback); + } + else { + uwsgi_php_404(wsgi_req); + return -1; + } } + char *orig_path_info = wsgi_req->path_info; uint16_t orig_path_info_len = wsgi_req->path_info_len;