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;