From: Ian B. <ia...@co...> - 2004-05-03 17:30:54
|
Leith Parkin wrote: > This seems like a perfect candidate for apaches rewrite rules > > Why not have a single servlet (or more if required) to handle displaying > blogs, and use a rewrite rule to internally rewrite say > > http://yourserver/blog/username to http://yourserver/wk/blog?user=username > > Then you can have the blog servlet automatically set up templates etc based > on usernames prefs This is how I would do it as well -- it seems like the application can be written with multiple users in mind. The rewrite rule would just look something like: RewriteRule ^/blog/([^/]*)(.*) /WK/blog/$2?user=$1 [L,PT,QSA] Or if you are using CVS Webware, you can do this with URLParser, something like (untested): __init__.py: from WebKit.URLParser import URLParser from WebKit.HTTPExceptions import * class NameParser(URLParser): def parseHook(self, trans, requestPath, hook): # hook.parse implements the "standard" URL parsing routine, so # you can delegate back to it. try: username, rest = requestPath[1:].split('/', 1) except ValueError: # The URL doesn't have enough /'s in it or something, which # means we're not getting /username/page... return hook.parse(trans, requestPath) request.setField('username', username) return hook.parse(trans, rest) # Magic name that URLParser looks for: urlParserHook = NameParser() This doesn't properly deal with /username without the trailing /, but that is left to the reader (hint: raise HTTPMovedPermanently(webkitLocation=trans.request().urlPath()+'/')) You can also do things like: try: return hook.parse(trans, requestPath) except HTTPNotFound: ... You could then only redirect calls that weren't found one place, to look in another place (e.g., look for an appropriate username if the page itself isn't found). This is how urlJoins is implemented, for instance. Lastly, you can use virtual hosts, like username.yourserver.com, and then use HTTP_HOST as your key. This is easiest in many ways. This is how the Wiki does it's virtualization. Ian |