summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nxt_http.h4
-rw-r--r--src/nxt_http_request.c8
-rw-r--r--src/nxt_http_rewrite.c10
-rw-r--r--src/nxt_http_route.c5
-rw-r--r--src/nxt_http_static.c2
5 files changed, 20 insertions, 9 deletions
diff --git a/src/nxt_http.h b/src/nxt_http.h
index 08e1fcbe..fc47faa8 100644
--- a/src/nxt_http.h
+++ b/src/nxt_http.h
@@ -173,6 +173,7 @@ struct nxt_http_request_s {
nxt_tstr_query_t *tstr_query;
nxt_tstr_cache_t tstr_cache;
+ nxt_http_action_t *action;
void *req_rpc_data;
#if (NXT_HAVE_REGEX)
@@ -382,8 +383,7 @@ nxt_int_t nxt_upstreams_joint_create(nxt_router_temp_conf_t *tmcf,
nxt_int_t nxt_http_rewrite_init(nxt_router_conf_t *rtcf,
nxt_http_action_t *action, nxt_http_action_conf_t *acf);
-nxt_int_t nxt_http_rewrite(nxt_task_t *task, nxt_http_request_t *r,
- nxt_http_action_t *action);
+nxt_int_t nxt_http_rewrite(nxt_task_t *task, nxt_http_request_t *r);
nxt_int_t nxt_http_return_init(nxt_router_conf_t *rtcf,
nxt_http_action_t *action, nxt_http_action_conf_t *acf);
diff --git a/src/nxt_http_request.c b/src/nxt_http_request.c
index 48f7dbe3..1ede9ffa 100644
--- a/src/nxt_http_request.c
+++ b/src/nxt_http_request.c
@@ -560,11 +560,9 @@ nxt_http_request_action(nxt_task_t *task, nxt_http_request_t *r,
if (nxt_fast_path(action != NULL)) {
do {
- if (action->rewrite != NULL) {
- ret = nxt_http_rewrite(task, r, action);
- if (nxt_slow_path(ret != NXT_OK)) {
- break;
- }
+ ret = nxt_http_rewrite(task, r);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ break;
}
action = action->handler(task, r, action);
diff --git a/src/nxt_http_rewrite.c b/src/nxt_http_rewrite.c
index fac96339..ae5c865a 100644
--- a/src/nxt_http_rewrite.c
+++ b/src/nxt_http_rewrite.c
@@ -26,15 +26,21 @@ nxt_http_rewrite_init(nxt_router_conf_t *rtcf, nxt_http_action_t *action,
nxt_int_t
-nxt_http_rewrite(nxt_task_t *task, nxt_http_request_t *r,
- nxt_http_action_t *action)
+nxt_http_rewrite(nxt_task_t *task, nxt_http_request_t *r)
{
u_char *p;
nxt_int_t ret;
nxt_str_t str, encoded_path, target;
nxt_router_conf_t *rtcf;
+ nxt_http_action_t *action;
nxt_http_request_parse_t rp;
+ action = r->action;
+
+ if (action == NULL || action->rewrite == NULL) {
+ return NXT_OK;
+ }
+
if (nxt_tstr_is_const(action->rewrite)) {
nxt_tstr_str(action->rewrite, &str);
diff --git a/src/nxt_http_route.c b/src/nxt_http_route.c
index 0935dd4a..8fd6801d 100644
--- a/src/nxt_http_route.c
+++ b/src/nxt_http_route.c
@@ -1573,6 +1573,11 @@ nxt_http_route_handler(nxt_task_t *task, nxt_http_request_t *r,
}
if (action != NULL) {
+
+ if (action != NXT_HTTP_ACTION_ERROR) {
+ r->action = action;
+ }
+
return action;
}
}
diff --git a/src/nxt_http_static.c b/src/nxt_http_static.c
index 5e44aab4..e51ba6b0 100644
--- a/src/nxt_http_static.c
+++ b/src/nxt_http_static.c
@@ -696,6 +696,8 @@ nxt_http_static_next(nxt_task_t *task, nxt_http_request_t *r,
if (nxt_slow_path(r->log_route)) {
nxt_log(task, NXT_LOG_NOTICE, "\"fallback\" taken");
}
+
+ r->action = action->fallback;
nxt_http_request_action(task, r, action->fallback);
return;
}