Questions: 1. Shouldn't app1 or app2 be one of the 5 apps specified in "applications"?
2. Does this (controllers = ['myctlr', 'ctr']) all apps (app1, app2 in particular) must have 2 controllers named "myctlr" and "ctr"? On Jan 3, 8:28 pm, Jonathan Lundell <[email protected]> wrote: > The new URL routing facility that I described a few days ago is now in the > trunk. Iprovides fairly powerful rewriting with very simple configuration and > no regexes. The configuration is described below. > > WARNING: this is beta-quality code. There are surely bugs in it, and the > API/configuration will no doubt change a little. On the other hand, it's > simple to configure, and I'd appreciate as much testing as possible. > > You should see *no* change in routing behavior if you do not add a router > entry to routes.py. Please notify me ASAP if you notice anything to the > contrary. > > Features: > > * remove default application/controller names from URLs > > * support domain<->app mapping (no visible app names) > > * support language codes embedded in URLs: /app/en/ctlr/fcn/args > > * handle static files, including root-based files like favicon.ico, > automatically > > * make full URL-legal character set available for args and vars > (This was the original driver for making the changes, since it was > essentially impossible to > retrofit into the existing rewrite system. The secondary goal was to > address 99% of required > functionality while keeping configuration as close to trivial as possible.) > > * app-specific routing > > The new logic is selected in routes.py. The old regex logic remains > available, though not simultaneously. > > The language feature is not yet tied into web2py's existing language support, > so for now all you get is URL conversion and support for language-specific > subdirectories in app/static. > > There's a new routing example file called router.example.py that has some > documentation, reproduced below. As with routes.example.py, you copy it to > routes.py and edit it for your own configuration. > > # router is a dictionary of URL routing parameters. > # > # For each request, the effective router is the default router (below), > # updated by the base router (if any) from routes.py, > # updated by the relevant application-specific router (if any) > # from applications/app/routes.py. > # > # Optional members of base router: > # > # default_application: default application name > # applications: list of all recognized applications, > # or 'ALL' to use all currently installed applications > # map_domain: dict used to map domain names to application names > # > # These values may be overridden by app-specific routers: > # > # default_controller: name of default controller > # default_function: name of default function (all controllers) > # root_static: list of static files accessed from root > # (mapped to the selected application's static/ directory) > # > # > # Optional members of application-specific router: > # > # These values override those in the base router: > # > # default_controller > # default_function > # root_static > # > # When these appear in the base router, they apply to the default > application only: > # > # controllers: list of valid controllers in selected app > # or "DEFAULT" to use all controllers in the selected app plus 'static' > # or [] to disable controller-name omission > # languages: list of all supported languages > # default_language > # The language code (for example: en, it-it) optionally appears in the > URL following > # the application (which may be omitted). For incoming URLs, the code > is copied to > # request.language; for outgoing URLs it is taken from request.language. > # If languages=[], language support is disabled. > # The default_language, if any, is omitted from the URL. > # check_args: set to False to suppress arg checking > # request.raw_args always contains a list of raw args from the URL, not > unquoted > # request.args are the same values, unquoted > # By default (check_args=True), args are required to match args_match. > # acfe_match: regex for valid application, controller, function, extension > /a/c/f.e > # file_match: regex for valid file (used for static file names) > # args_match: regex for valid args (see also check_args flag) > # > # > # The built-in default router supplies default values (undefined members are > None): > # > # router = dict( > # default_application = 'init', > # applications = 'ALL', > # default_controller = 'default', > # controllers = 'DEFAULT', > # default_function = 'index', > # root_static = ['favicon.ico', 'robots.txt'], > # map_domain = dict(), > # languages = [], > # default_language = None, > # check_args = True, > # map_hyphen = True, > # acfe_match = r'\w+$', # legal app/ctlr/fcn/ext > # file_match = r'(\w+[-=./]?)+$', # legal file (path) name > # args_match = r'([\w@ -]+[=.]?)+$', # legal arg in args > # ) > # > # See rewrite.map_url_in() and rewrite.map_url_out() for implementation > details. > > # This simple router overrides only the default application name, > # but provides full rewrite functionality. > # > # router = dict( > # default_application = 'welcome', > # ) > > # This router supports the doctests below; it's not very realistic. > # > router = dict( > applications = ['welcome', 'admin', 'app', 'myapp', 'bad!app'], > default_application = 'myapp', > controllers = ['myctlr', 'ctr'], > default_controller = 'myctlr', > default_function = 'myfunc', > languages = ['en', 'it', 'it-it'], > default_language = 'en', > map_domain = { > "domain1.com" : "app1", > "domain2.com" : "app2" > }, > )

