如何重定向到www.Heroku上我的Flask网站的版本?

Joh*_*han 9 python heroku flask

我有一个运行在Heroku(Cedar堆栈)上的Python Flask应用程序,它有两个自定义域(一个有一个域,一个没有www子域).我想将所有传入的请求重定向到www.请求的资源版本(此问题的反面).我想我需要一些WSGI中间件,但我找不到一个很好的例子.

我该怎么做呢?

Dan*_*gen 14

比创建单独的Heroku应用程序更简单的解决方案是before_request功能.

from urlparse import urlparse, urlunparse

@app.before_request
def redirect_nonwww():
    """Redirect non-www requests to www."""
    urlparts = urlparse(request.url)
    if urlparts.netloc == 'example.com':
        urlparts_list = list(urlparts)
        urlparts_list[1] = 'www.example.com'
        return redirect(urlunparse(urlparts_list), code=301)
Run Code Online (Sandbox Code Playgroud)

这将使用"HTTP 301 Moved Permanently"响应将所有非www请求重定向到www.

  • 对于 python3:将 `from urlparse import urlparse, urlunparse` 替换为 `from urllib.parse import urlparse, urlunparse` (2认同)