You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Paul Sutton <pc...@hyperreal.com> on 1996/11/04 10:34:05 UTC
cvs commit: apache/src mod_alias.c
pcs 96/11/04 01:34:05
Modified: src mod_alias.c
Log:
Reviewed-by: Chuck Murcko, Mark Cox
Add NCSA-compatible RedirectTemp and RedirectPermanent directives.
Also allow 410 Gone status with "Redirect URL gone".
Revision Changes Path
1.10 +26 -12 apache/src/mod_alias.c
Index: mod_alias.c
===================================================================
RCS file: /export/home/cvs/apache/src/mod_alias.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C3 -r1.9 -r1.10
*** mod_alias.c 1996/11/03 20:48:28 1.9
--- mod_alias.c 1996/11/04 09:34:04 1.10
***************
*** 65,70 ****
--- 65,71 ----
char *real;
char *fake;
char *handler;
+ int redir_status; /* 301, 302, 303 */
} alias_entry;
typedef struct {
***************
*** 136,152 ****
server_rec *s = cmd->server;
alias_server_conf *serverconf =
(alias_server_conf *)get_module_config(s->module_config,&alias_module);
! if (!is_url (url)) return "Redirect to non-URL";
if ( cmd->path )
- {
new = push_array (dirconf->redirects);
- }
else
- {
new = push_array (serverconf->redirects);
! }
new->fake = f; new->real = url;
return NULL;
}
--- 137,157 ----
server_rec *s = cmd->server;
alias_server_conf *serverconf =
(alias_server_conf *)get_module_config(s->module_config,&alias_module);
+ int status;
! if (!strcasecmp(url, "gone"))
! status = HTTP_GONE;
! else {
! if (!is_url (url)) return "Redirect to non-URL";
! status = (int)cmd->info;
! }
if ( cmd->path )
new = push_array (dirconf->redirects);
else
new = push_array (serverconf->redirects);
!
new->fake = f; new->real = url;
+ new->redir_status = status;
return NULL;
}
***************
*** 155,161 ****
"a fakename and a realname"},
{ "ScriptAlias", add_alias, "cgi-script", RSRC_CONF, TAKE2,
"a fakename and a realname"},
! { "Redirect", add_redirect, NULL, OR_FILEINFO, TAKE2,
"a document to be redirected, then the destination URL" },
{ NULL }
};
--- 160,170 ----
"a fakename and a realname"},
{ "ScriptAlias", add_alias, "cgi-script", RSRC_CONF, TAKE2,
"a fakename and a realname"},
! { "Redirect", add_redirect, (void*)302, OR_FILEINFO, TAKE2,
! "a document to be redirected, then the destination URL (or \"Gone\")" },
! { "RedirectTemp", add_redirect, (void*)302, OR_FILEINFO, TAKE2,
! "a document to be redirected, then the destination URL" },
! { "RedirectPermanent", add_redirect, (void*)301, OR_FILEINFO, TAKE2,
"a document to be redirected, then the destination URL" },
{ NULL }
};
***************
*** 194,200 ****
return urip - uri;
}
! char *try_alias_list (request_rec *r, array_header *aliases, int doesc)
{
alias_entry *entries = (alias_entry *)aliases->elts;
int i;
--- 203,209 ----
return urip - uri;
}
! char *try_alias_list (request_rec *r, array_header *aliases, int doesc, int *status)
{
alias_entry *entries = (alias_entry *)aliases->elts;
int i;
***************
*** 209,217 ****
--- 218,229 ----
table_set (r->notes, "alias-forced-type", p->handler);
}
+ *status = p->redir_status;
+
if (doesc) {
char *escurl;
escurl = os_escape_path(r->pool, r->uri + l, 1);
+
return pstrcat(r->pool, p->real, escurl, NULL);
} else
return pstrcat(r->pool, p->real, r->uri + l, NULL);
***************
*** 227,232 ****
--- 239,245 ----
alias_server_conf *serverconf =
(alias_server_conf *)get_module_config(sconf, &alias_module);
char *ret;
+ int status;
#ifdef __EMX__
/* Add support for OS/2 drive names */
***************
*** 236,247 ****
#endif
return DECLINED;
! if ((ret = try_alias_list (r, serverconf->redirects, 1)) != NULL) {
table_set (r->headers_out, "Location", ret);
! return REDIRECT;
}
! if ((ret = try_alias_list (r, serverconf->aliases, 0)) != NULL) {
r->filename = ret;
return OK;
}
--- 249,260 ----
#endif
return DECLINED;
! if ((ret = try_alias_list (r, serverconf->redirects, 1, &status)) != NULL) {
table_set (r->headers_out, "Location", ret);
! return status;
}
! if ((ret = try_alias_list (r, serverconf->aliases, 0, &status)) != NULL) {
r->filename = ret;
return OK;
}
***************
*** 255,266 ****
alias_dir_conf *dirconf =
(alias_dir_conf *)get_module_config(dconf, &alias_module);
char *ret;
/* It may have changed since last time, so try again */
! if ((ret = try_alias_list (r, dirconf->redirects, 1)) != NULL) {
table_set (r->headers_out, "Location", ret);
! return REDIRECT;
}
return DECLINED;
--- 268,280 ----
alias_dir_conf *dirconf =
(alias_dir_conf *)get_module_config(dconf, &alias_module);
char *ret;
+ int status;
/* It may have changed since last time, so try again */
! if ((ret = try_alias_list (r, dirconf->redirects, 1, &status)) != NULL) {
table_set (r->headers_out, "Location", ret);
! return status;
}
return DECLINED;