我已成功为我的应用程序添加 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/栏/路径
。我想要这样的东西:http://www.stef.io并查看地址栏中的 www.
是如何消失的。
到目前为止,我在 Google 上找到的说明是关于编辑我的 .htaccess
文件的,但我在 Heroku 上运行 Flask 框架上的 Python 应用程序。
为此推荐的解决方案是 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)
这将使用“HTTP 301 永久移动”响应将所有 www 请求重定向到非 www。
我是一名优秀的程序员,十分优秀!