I am rewriting wsgi.py in nevow. I face some problems with the nevow url module. Firstly, only guard and rootaccessor uses IRequest.getRootURL() In twisted the root url is always like http://domain.com/ . In non-twisted setups like wsgi, it is not so. And well, nevow is designed to work with cgi apps too (nevow-deployment.txt) Consider this cgi/wsgi/nevow setup: http://example.com/cgi-bin/nevowcgi.py/a/b/c nevowcgi.py will createWSGIApplication and call run_with_cgi. The wsgi.py module will then use the PATH_INFO environment variable for request URI (IRequest.uri). Thus in the above example, IRequest.uri is '/a/b/c'. wsgi.py in addition sets the appRootURL to 'http://example.com/cgi-bin/nevowcgi.py/' which is passed from nevowcgi.py Lot of code in nevow doesn't use the appRootURL. For example if PageC.addSlash is True, the above url will be redirected to http://example.com/a/b/c/ and not http://example.com/cgi-bin/nevowcgi.py/a/b/c/ as expected (not the leading slash) Because of this reason, I couldn't get wsgi.py work fully. To fix some problems (excluding the redirect problem) WSGIRequest.prePathURL will return the full URL prefixed with appRootURL (which is not the case with twisted.web.server.Request.prePathURL -- Sridhar Ratna - http://srid.bsdnerds.org