假設我的應用程序在域www.example.com
處提供。金字塔:如何指定應用程序的基本URL
我應該如何在Pyramid配置文件中指定它,以便像request.route_url
這樣的函數自動選擇它並生成正確的URL。
(我認爲[server:main]
不是這個地方)的URL生成功能route_url
,static_url
,resource_url
都依賴於從他們採取一切來生成一個完整的URL所需的基本參數WSGI ENVIRON字典
假設我的應用程序在域www.example.com
處提供。金字塔:如何指定應用程序的基本URL
我應該如何在Pyramid配置文件中指定它,以便像request.route_url
這樣的函數自動選擇它並生成正確的URL。
(我認爲[server:main]
不是這個地方)的URL生成功能route_url
,static_url
,resource_url
都依賴於從他們採取一切來生成一個完整的URL所需的基本參數WSGI ENVIRON字典
。
因此,一種方法是在請求創建時修改WSGI環境字典,並修改所需的參數。事件是非常適合這種事情:
from pyramid.events import NewRequest
from pyramid.events import subscriber
@subscriber(NewRequest)
def mysubscriber(event):
event.request.environ['HTTP_HOST'] = 'example.com'
在此之後,route_url
將example.com
基礎網址。
是的,一個正確的反向代理將沿着適當的標題轉發到你的wsgi服務器。查看金字塔食譜獲取nginx配方。
爲了澄清,Pyramid生成相對於**當前**請求的URL。它沒有被託管在特定或單一前綴的概念。 – 2013-03-14 07:49:57
@MichaelMerickel是的,沒錯。但有一個問題:如果你把金字塔應用放在Nginx的後面(比如說),通過Nginx配置發送HTTP_HOST(和其他)不是更好。這樣你可以使你的應用程序變得完全通用它也將消除執行NewRequest事件處理程序的開銷。 – treecoder 2013-03-14 07:52:16
如果您的前端代理使用HTTPS,另一個有用的重寫是'environ ['wsgi.url_scheme'] ='https''。 – 2016-04-07 13:47:22