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

2024-06-16 11:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

www.myapp.com
myapp.com

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,看看{}是如何从地址栏中消失的。在

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


Tags: path路径com应用程序http目标herokufoo
2条回答

我不习惯烧瓶,但是你可以设置一个与/^www/匹配的路由,然后重定向到不带“www”的url。在

您可能需要选中http://werkzeug.pocoo.org/docs/routing/#custom-convertershttp://werkzeug.pocoo.org/docs/routing/#host-matching

推荐的解决方案是DNS级重定向(参见heroku help)。在

或者,您可以注册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)

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

相关问题 更多 >