|
|
|
@ -12,6 +12,8 @@
|
|
|
|
|
typedef struct {
|
|
|
|
|
pcre_keyvalue_buffer *redirect;
|
|
|
|
|
data_config *context; /* to which apply me */
|
|
|
|
|
|
|
|
|
|
unsigned short redirect_code;
|
|
|
|
|
} plugin_config;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
@ -68,6 +70,7 @@ SETDEFAULTS_FUNC(mod_redirect_set_defaults) {
|
|
|
|
|
|
|
|
|
|
config_values_t cv[] = {
|
|
|
|
|
{ "url.redirect", NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
|
|
|
|
|
{ "url.redirect-code", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
|
|
|
|
|
{ NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -84,8 +87,10 @@ SETDEFAULTS_FUNC(mod_redirect_set_defaults) {
|
|
|
|
|
|
|
|
|
|
s = calloc(1, sizeof(plugin_config));
|
|
|
|
|
s->redirect = pcre_keyvalue_buffer_init();
|
|
|
|
|
s->redirect_code = 301;
|
|
|
|
|
|
|
|
|
|
cv[0].destination = s->redirect;
|
|
|
|
|
cv[1].destination = &(s->redirect_code);
|
|
|
|
|
|
|
|
|
|
p->config_storage[i] = s;
|
|
|
|
|
ca = ((data_config *)srv->config_context->data[i])->value;
|
|
|
|
@ -136,6 +141,7 @@ static int mod_redirect_patch_connection(server *srv, connection *con, plugin_da
|
|
|
|
|
plugin_config *s = p->config_storage[0];
|
|
|
|
|
|
|
|
|
|
p->conf.redirect = s->redirect;
|
|
|
|
|
p->conf.redirect_code = s->redirect_code;
|
|
|
|
|
p->conf.context = NULL;
|
|
|
|
|
|
|
|
|
|
/* skip the first, the global context */
|
|
|
|
@ -153,6 +159,8 @@ static int mod_redirect_patch_connection(server *srv, connection *con, plugin_da
|
|
|
|
|
if (0 == strcmp(du->key->ptr, "url.redirect")) {
|
|
|
|
|
p->conf.redirect = s->redirect;
|
|
|
|
|
p->conf.context = dc;
|
|
|
|
|
} else if (0 == strcmp(du->key->ptr, "url.redirect-code")) {
|
|
|
|
|
p->conf.redirect_code = s->redirect_code;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -246,7 +254,7 @@ static handler_t mod_redirect_uri_handler(server *srv, connection *con, void *p_
|
|
|
|
|
|
|
|
|
|
response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->location));
|
|
|
|
|
|
|
|
|
|
con->http_status = 301;
|
|
|
|
|
con->http_status = p->conf.redirect_code > 99 && p->conf.redirect_code < 1000 ? p->conf.redirect_code : 301;
|
|
|
|
|
con->mode = DIRECT;
|
|
|
|
|
con->file_finished = 1;
|
|
|
|
|
|
|
|
|
|