Vhost support
Mark Constable
markc at renta.net
Sat Jan 29 15:37:02 MSK 2011
On 29/01/11, António P. P. Almeida wrote:
> Make it:
> server_name ~^(?<p1>[^\.]*)[\.]*(?<p2>[^\.]*)[\.]*(?<p3>[^\.]*)[\.]*(?<p4>[^\.]+)\.(?<p5>[^\.]+)$;
> Forgot to escape the "." in the named capturing groups.
Thanks Antonio, this does indeed work. The only downside I can see is
that the system file path is something like /var/www////com/domain/,
when there are less than 5 parts, but it still seems to work okay.
server {
listen 80;
server_name ~^(?<p1>[^\.]*)[\.]*(?<p2>[^\.]*)[\.]*(?<p3>[^\.]*)[\.]*(?<p4>[^\.]*)[\.]*(?<p5>[^\.]*)$;
location / {
root /var/www/$p5/$p4/$p3/$p2/$p1;
index index.html index.htm index.jsx index.php;
}
}
I'd still be interested to do this without requiring a regex as all
it would take is something like this small amount of code in a module,
or as a patch to core...
char *add_path_element(char *dest, char *element)
{
*dest++ = '/';
strcpy(dest,element);
return dest + strlen(element);
}
[...]
server_name = ap_get_server_name(r);
buf = apr_pstrdup(r->pool, server_name);
rvp = apr_palloc(r->pool, strlen(buf)+1);
r->canonical_filename = "";
/* Work out the reverse path */
for (p = rvp, q = buf+strlen(buf); q >= buf; q--) {
if (*q == '.') {
*q = '\0';
p = add_path_element(p, q+1);
}
}
p = add_path_element(p,buf);
[...]
Anyone care to suggest where is the best place to start to look for
a module or patch to add something like the above?
--markc
More information about the nginx
mailing list