I was looking for a way to map a single servlet context on different URIs (so as to be able to use relative URLs in the HTML outputs - for internationalization and customization purposes).
I finally made a patch on mod_webapp (Apache-1.3) that adds the directive WebAppAlias (Usage: WebAppAlias <uri-dest> <uri-alias>). My httpd.conf now looks like: [.../...] WebAppConnection warpConnection warp localhost:8008 WebAppDeploy . warpConnection /servlet/ WebAppAlias /servlet/ /neostyle/us/servlet/ WebAppAlias /servlet/ /oldstyle/fr/servlet/ [.../...] The request [http://<MYSERVER>/oldstyle/fr/servlet/HelloWorld] is then totally equivalent to [http://<MYSERVER>/servlet/HelloWorld], since I replace [/oldstyle/fr/servlet/] by [/servlet/] in wam_match method. In case it is usefull to s.o., here is the patch I made: Index: webapp/apache-1.3/mod_webapp.c =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-connectors/webapp/apache-1.3/mod_webapp.c,v retrieving revision 1.29 diff -u -r1.29 mod_webapp.c --- webapp/apache-1.3/mod_webapp.c 1 Nov 2001 22:20:51 -0000 1.29 +++ webapp/apache-1.3/mod_webapp.c 29 Dec 2001 01:46:25 -0000 @@ -69,6 +69,15 @@ #include <util_script.h> #include <wa.h> + +typedef struct wa_aliases wa_aliases; +struct wa_aliases { + const char *dest; + const char *alias; + /** The pointer to the next aliases structure or <b>NULL</b>. */ + wa_aliases *next; +}; + /* ************************************************************************* */ /* GENERIC DECLARATIONS */ /* ************************************************************************* */ @@ -81,6 +90,8 @@ static wa_chain *wam_connections=NULL; /* The main server using for logging error not related to requests */ static server_rec *server=NULL; +/* Aliases (JLD) */ +static wa_aliases *wam_aliases=NULL; /* ************************************************************************* */ /* MODULE AND LIBRARY INITIALIZATION AND DESTRUCTION */ @@ -177,6 +188,22 @@ return(NULL); } +/* Process the WebAppAlias directive */ +static const char *wam_directive_alias(cmd_parms *cmd, void *mconfig, + const char *dest, const char *alias) { + wa_aliases *elem=NULL; + + if (dest==NULL) return("Invalid alias destination"); + if (alias==NULL) return("Invalid alias name"); + + elem=apr_palloc(wa_pool,sizeof(wa_aliases)); + elem->dest=apr_pstrdup(wa_pool,dest); + elem->alias=apr_pstrdup(wa_pool,alias); + elem->next=wam_aliases; + wam_aliases=elem; + return(NULL); +} + /* Process the WebAppDeploy directive */ static const char *wam_directive_deploy(cmd_parms *cmd, void *mconfig, char *name, char *cnam, char *path) { @@ -250,6 +277,13 @@ RSRC_CONF, /* where available */ TAKE3, /* arguments */ "<name> <connection> <uri-path>" + }, { + "WebAppAlias", /* directive name */ + wam_directive_alias, /* config action routine */ + NULL, /* argument to include in call */ + RSRC_CONF, /* where available */ + TAKE2, /* arguments */ + "<uri-dest> <uri-alias>" }, {NULL} }; @@ -386,6 +420,8 @@ wa_virtualhost *host=NULL; wa_application *appl=NULL; wa_chain *elem=NULL; + wa_aliases *alias=NULL; + char *newuri=NULL; /* Paranoid check */ if (!wam_initialized) return(DECLINED); @@ -399,6 +435,20 @@ while(elem!=NULL) { appl=(wa_application *)elem->curr; if (strncmp(appl->rpth,r->uri,strlen(appl->rpth))==0) break; + // Check the aliases (JLD) + alias=wam_aliases; + while(alias!=NULL) { + if ((strcmp(alias->dest,appl->rpth)==0) && + (strncmp(alias->alias,r->uri,strlen(alias->alias))==0)) { + newuri=ap_palloc(r->pool, strlen(appl->rpth) + strlen(r->uri) - strlen(alias->alias)); + strcpy(newuri, appl->rpth); + strcat(newuri, r->uri + strlen(alias->alias)); + r->uri=newuri; + break; + } + alias=alias->next; + } + if (newuri!=NULL) break; appl=NULL; elem=elem->next; -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>