WSGI 中的所有内容都与当前请求相关。您只需要environ
正确设置(通常通过您的 WSGI 服务器)。
例如,/projects
如果request.environ['SCRIPT_NAME'] == '/projects'
. 如果您希望您的应用程序对其挂载点不可知,您可以简单地对其进行编码,就好像它在/foo/bar
. /projects
然后你通过一些中间件挂载你的应用程序,这些中间件可以environ
正确地改变(mod_wsgi 和其他一些服务器应该能够自动为你做到这一点)。现在,当传入的 URL 是/projects/foo/bar
andenviron['SCRIPT_NAME'] == '/projects'
时environ['PATH_INFO'] == '/foo/bar'
,您的应用程序可以专注于相对路径。
在 Pyramid 中,这将归结为 ini 中的一个额外步骤,您可以在其中将前缀中间件添加到 WSGI 堆栈中。中间件会为您处理改变PATH_INFO
和SCRIPT_NAME
中的键environ
。
[app:myapp]
use = egg:myapp
# ...
[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /projects
[pipeline:main]
pipeline =
proxy-prefix
myapp