comparison src/http/modules/ngx_http_rewrite_handler.c @ 326:8733703a37f3

nginx-0.0.3-2004-04-26-00:13:21 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 25 Apr 2004 20:13:21 +0000
parents 7c3323909107
children 6f3b20c1ac50
comparison
equal deleted inserted replaced
325:7c3323909107 326:8733703a37f3
24 ngx_uint_t size; 24 ngx_uint_t size;
25 25
26 ngx_str_t re_name; 26 ngx_str_t re_name;
27 ngx_str_t s_name; 27 ngx_str_t s_name;
28 28
29 ngx_uint_t status;
29 unsigned last:1; 30 unsigned last:1;
30 } ngx_http_rewrite_rule_t; 31 } ngx_http_rewrite_rule_t;
31 32
32 33
33 typedef struct { 34 typedef struct {
121 rc = ngx_regex_exec(rule[i].regex, &r->uri, matches, rule[i].msize); 122 rc = ngx_regex_exec(rule[i].regex, &r->uri, matches, rule[i].msize);
122 123
123 if (rc == NGX_DECLINED) { 124 if (rc == NGX_DECLINED) {
124 if (scf->log) { 125 if (scf->log) {
125 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0, 126 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
126 "\"%s\" does not match", rule[i].re_name.data); 127 "\"%s\" does not match \"%s\"",
128 rule[i].re_name.data, r->uri.data);
127 } 129 }
128 130
129 continue; 131 continue;
130 } 132 }
131 133
137 return NGX_HTTP_INTERNAL_SERVER_ERROR; 139 return NGX_HTTP_INTERNAL_SERVER_ERROR;
138 } 140 }
139 141
140 if (scf->log) { 142 if (scf->log) {
141 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0, 143 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
142 "\"%s\" matches", rule[i].re_name.data); 144 "\"%s\" matches \"%s\"",
145 rule[i].re_name.data, r->uri.data);
146 }
147
148 if (rule[i].status) {
149 return rule[i].status;
143 } 150 }
144 151
145 uri.len = rule[i].size; 152 uri.len = rule[i].size;
146 153
147 for (n = 1; n < (ngx_uint_t) rc; n++) { 154 for (n = 1; n < (ngx_uint_t) rc; n++) {
245 ngx_init_array(rule->ops, cf->pool, 5, sizeof(ngx_http_rewrite_op_t), 252 ngx_init_array(rule->ops, cf->pool, 5, sizeof(ngx_http_rewrite_op_t),
246 NGX_CONF_ERROR); 253 NGX_CONF_ERROR);
247 254
248 rule->msize = 0; 255 rule->msize = 0;
249 rule->size = 0; 256 rule->size = 0;
257 rule->status = 0;
258 rule->last = 0;
250 259
251 value = cf->args->elts; 260 value = cf->args->elts;
252 261
253 /* STUB */ { 262 /* STUB */ {
254 err.len = NGX_MAX_CONF_ERRSTR; 263 err.len = NGX_MAX_CONF_ERRSTR;
261 return NGX_CONF_ERROR; 270 return NGX_CONF_ERROR;
262 } 271 }
263 272
264 rule->re_name = value[1]; 273 rule->re_name = value[1];
265 rule->s_name = value[2]; 274 rule->s_name = value[2];
275
276 if (ngx_strcasecmp(value[2].data, "forbidden:") == 0) {
277
278 if (cf->args->nelts == 3) {
279 rule->status = NGX_HTTP_FORBIDDEN;
280 rule->last = 1;
281 return NGX_CONF_OK;
282 }
283
284 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
285 "invalid parameter \"%s\"", value[3].data);
286 return NGX_CONF_ERROR;
287 }
266 288
267 for (i = 0; i < value[2].len; /* void */) { 289 for (i = 0; i < value[2].len; /* void */) {
268 290
269 if (!(op = ngx_push_array(&rule->ops))) { 291 if (!(op = ngx_push_array(&rule->ops))) {
270 return NGX_CONF_ERROR; 292 return NGX_CONF_ERROR;