Python 如何重定向URL以“开始”开头的所有请求;www";到一个裸域?

Python 如何重定向URL以“开始”开头的所有请求;www";到一个裸域?,python,redirect,heroku,dns,flask,Python,Redirect,Heroku,Dns,Flask,我已经成功地为我的应用程序添加了Heroku自定义域。我想知道如何捕获以www开头的请求,并将它们重定向到裸域。例如,我将以下自定义域映射到我的Heroku应用程序: www.myapp.com myapp.com 请求http://myapp.com和http://www.myapp.com都成功,但www仍保持打开状态 客观的 我想要http://www.myapp.com要重定向到http://myapp.com。这也适用于其他路径,如http://www.myapp.com/some/

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

www.myapp.com
myapp.com
请求
http://myapp.com
http://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
。我想要这样的东西:看看
www.
是如何从地址栏中消失的


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

我不习惯Flask,但你可以设置一个与/^www/匹配的路由,然后将它重定向到url,而不使用“www”


您可能需要检查或

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

或者,您可以在请求之前注册
功能:

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)

这将使用“HTTP 301永久移动”响应将所有www请求重定向到非www。

虽然不使用www的域更美观,但Heroku不鼓励在可能的情况下使用apex域。有关更多详细信息,请阅读此问题的解决方案部分