You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Rob Hartill <ha...@ooo.lanl.gov> on 1995/08/16 23:25:23 UTC
premature ScriptAlias/Alias translation
ScriptAlias /B/C /usr/local/httpd/cgi-bin/tester
Alias /B /usr/local/httpd/htdocs/x.html
doesn't doesn't work as it should (should = my interpretation)
/B/C always gets thumped by the Alias.
A possible patch follows,
*** ../../apache_0.8.7/src/mod_alias.c Mon Jul 31 18:46:04 1995
--- mod_alias.c Wed Aug 16 15:10:59 1995
***************
*** 140,148 ****
char *try_alias_list (request_rec *r, array_header *aliases)
{
! alias_entry *entries = (alias_entry *)aliases->elts;
! int i;
for (i = 0; i < aliases->nelts; ++i) {
alias_entry *p = &entries[i];
int l = strlen(p->fake);
--- 140,171 ----
char *try_alias_list (request_rec *r, array_header *aliases)
{
! alias_entry *entries;
! int i, script_alias_length;
+ /* First check for a matching ScriptAlias that we don't want to thump */
+ extern module cgi_module;
+ array_header *saliases =
+ (array_header *)get_module_config(r->server->module_config, &cgi_module);
+
+ entries = (alias_entry *)saliases->elts;
+
+ script_alias_length = 0;
+ for (i = 0; i < saliases->nelts; ++i) {
+ alias_entry *p = &entries[i];
+ int l = strlen(p->fake);
+
+ if(!strncmp(r->uri, p->fake, l)
+ && (p->fake[l-1] == '/' || l == strlen(r->uri) || r->uri[l] == '/'))
+ {
+ script_alias_length = l; /* Remember the fake script alias length */
+ break;
+ }
+ }
+
+ /* Let's now check the other aliases */
+ entries = (alias_entry *)aliases->elts;
+
for (i = 0; i < aliases->nelts; ++i) {
alias_entry *p = &entries[i];
int l = strlen(p->fake);
***************
*** 150,156 ****
if(!strncmp(r->uri, p->fake, l)
&& (p->fake[l-1] == '/' || l == strlen(r->uri) || r->uri[l] == '/'))
{
! return pstrcat(r->pool, p->real, r->uri + l, NULL);
}
}
--- 173,180 ----
if(!strncmp(r->uri, p->fake, l)
&& (p->fake[l-1] == '/' || l == strlen(r->uri) || r->uri[l] == '/'))
{
! if (l > script_alias_length) /* don't use a shorter Alias */
! return pstrcat(r->pool, p->real, r->uri + l, NULL);
}
}