I like this idea better. It took me a little while to figure out exactly what was going on in rewrite.py to even arrive at my current solution, but I can see that what you suggest would be a better solution as well as easier to use.
I chose the env var because I knew could easily get to the value in the app using request.env.my_env_variable @Massimo I'll open a ticket with the general idea and mention this thread. On Saturday, December 14, 2013 5:37:19 PM UTC-5, Jonathan Lundell wrote: > > On 14 Dec 2013, at 2:23 PM, Massimo Di Pierro > <massimo....@gmail.com<javascript:>> > wrote: > > Please open a ticket about this proposal. > > > I wonder if a more general solution might not be to have the router accept > a regex for path_prefix, strip it from the incoming URL, and save it (say) > as request.path_prefix. The outgoing URL rewriter would use > request.path_prefix in preference to the value in the router. > > The point of doing it that way would be to avoid a dependency on the host > webserver. > > The original use case, iirc, was to support installations in which the > domain was shared between web2py and something else, so you could for > example have URLs of the form http://domain.com/web2py/app/.... > > > On Saturday, 14 December 2013 15:07:02 UTC-6, Rob Mayhue wrote: >> >> Proposal - use the value of an environment variable as a path_prefix >> >> When using the parametric router there is an option called `path_prefix` >> that's >> described as "a path fragment that is prefixed to all outgoing URLs and >> stripped >> from all incoming URLs". I'm not sure what the original use case was for >> this option >> but the "path fragment" is a static value, a string that's added to BASE >> in routes.py >> like so: >> >> routers = dict( >> ... >> BASE=dict( >> ... >> path_prefix='PATH_FRAGMENT', # or even 'PATH/FRAGMENT' >> ... >> ), >> ) >> >> >> This allows things like 'http://domain-name.tld/PATH_FRAGMENT/a/c/f' >> >> In my use case I wanted the simplicity of the parametric router but I >> needed to be >> able to pass in the path fragment on the incoming URL so that it could >> change and >> still be "prefixed to all outgoing URLs and stripped from all incoming >> URLs", or >> possibly not even exist at all. >> >> I made some changes to gluon/rewrite.py to allow the value of an >> environment variable >> to be used as the path fragment if it exists. To use it I prefix the >> string assigned >> to `path_prefix` with a '$' like this: >> >> routers = dict( >> ... >> BASE=dict( >> ... >> path_prefix='$MY_ENV_VARIABLE', >> ... >> ), >> ) >> >> >> Leaving off the '$' causes `path_prefix` to work normally. >> >> Then in the server config I use a rewrite rule and get the path fragment >> via a >> regex and create the environment variable. The following is an apache >> rewrite rule, >> but this could be nginx etc as well. This rule gets anything starting >> with an >> underscore (e.g. http://domain-name.tld/_MY_VALUE). >> >> RewriteRule ^/(_[^/]+) - [E=MY_ENV_VARIABLE:$1] >> >> >> After that we have an environment variable with 'MY_ENV_VARIABLE' as its >> key and >> '_MY_VALUE' as its value. >> >> Basically the changes I made to gluon/rewrite.py allow the value of that >> environment >> variable to be used as the path fragment allowing you to change it by >> passing in a new >> path fragment on the URL and it acts just like the original `path_prefix` >> option. >> >> In my use case I'm planning to use the "path fragment" for multi-tenancy. >> Maybe there >> is a better way to do this using the pattern based router and I just >> didn't see it. >> >> I wanted to toss this onto the list and get some feedback, and if there >> is an easier >> way, be shown the light :) >> >> > -- > Resources: > - http://web2py.com > - http://web2py.com/book (Documentation) > - http://github.com/web2py/web2py (Source code) > - https://code.google.com/p/web2py/issues/list (Report Issues) > > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.