2013-03-14 49 views
1

假設我的應用程序在域www.example.com處提供。金字塔:如何指定應用程序的基本URL

我應該如何在Pyramid配置文件中指定它,以便像request.route_url這樣的函數自動選擇它並生成正確的URL。

(我認爲[server:main]不是這個地方)的URL生成功能route_urlstatic_urlresource_url都依賴於從他們採取一切來生成一個完整的URL所需的基本參數WSGI ENVIRON字典

回答

3

因此,一種方法是在請求創建時修改WSGI環境字典,並修改所需的參數。事件是非常適合這種事情:

from pyramid.events import NewRequest 
from pyramid.events import subscriber 

@subscriber(NewRequest) 
def mysubscriber(event): 
    event.request.environ['HTTP_HOST'] = 'example.com' 

在此之後,route_urlexample.com基礎網址。

+0

爲了澄清,Pyramid生成相對於**當前**請求的URL。它沒有被託管在特定或單一前綴的概念。 – 2013-03-14 07:49:57

+0

@MichaelMerickel是的,沒錯。但有一個問題:如果你把金字塔應用放在Nginx的後面(比如說),通過Nginx配置發送HTTP_HOST(和其他)不是更好。這樣你可以使你的應用程序變得完全通用它也將消除執行NewRequest事件處理程序的開銷。 – treecoder 2013-03-14 07:52:16

+0

如果您的前端代理使用HTTPS,另一個有用的重寫是'environ ['wsgi.url_scheme'] ='https''。 – 2016-04-07 13:47:22

1

是的,一個正確的反向代理將沿着適當的標題轉發到你的wsgi服務器。查看金字塔食譜獲取nginx配方。