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);
          }
      }