繁体   English   中英

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

[英]How do I redirect all requests with URLs beginning with “www” to a naked domain?

我成功地为我的应用添加了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并看看如何www. 离开了地址栏。

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

建议的解决方案是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)

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

我不习惯Flask,但你可以设置一个匹配/^www./的路由,然后将其重定向到没有“www”的url。

您可以查看http://werkzeug.pocoo.org/docs/routing/#custom-convertershttp://werkzeug.pocoo.org/docs/routing/#host-matching

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM