如何将包含以"www"开头的URL的所有请求重定向到裸域?

Kit*_*Kit 3 python dns redirect heroku flask

我成功地为我的应用添加了Heroku自定义域名.我想知道如何捕获以开头的请求www并将它们重定向到裸域.例如,我将以下自定义域映射到我的Heroku应用程序:

www.myapp.com
myapp.com
Run Code Online (Sandbox Code Playgroud)

请求http://myapp.comhttp://www.myapp.com成功,但www保持.

目的

我希望将所有请求http://www.myapp.com重定向到http://myapp.com.这也适用于其他路径,例如http://www.myapp.com/some/foo/bar/path重定向到http://myapp.com/some/foo/bar/path.我想要这样的东西:http://www.stef.io,看看它www.是如何离开地址栏的.

到目前为止,我在Google上找到的说明是关于编辑我的.htaccess文件,但我正在使用Flask框架上的Python应用程序在Heroku上运行.

Dan*_*gen 7

建议的解决方案是DNS级别重定向(请参阅heroku帮助).

或者,您可以注册一个before_request功能:

from urlparse import urlparse, urlunparse

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

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