如何在Bottle.py中全局实现非www请求301重定向到www规范域名
全局Canonical域名301重定向实现方案
在Flask框架中可以通过before_request请求钩子实现全局重定向逻辑,不需要修改任何现有路由的代码:
from flask import Flask, request, redirect app = Flask(__name__) # 替换为你的规范域名 CANONICAL_HOST = 'www.example.com' @app.before_request def check_canonical_host(): if request.urlparts.netloc != CANONICAL_HOST: # 替换Host为规范域名,保留原路径、参数等所有内容 redirect_url = request.urlparts._replace(netloc=CANONICAL_HOST).geturl() return redirect(redirect_url, 301) # 后续路由正常编写即可,不需要加任何重定向逻辑 @app.route('/') def home(): return "首页内容" @app.route('/user/<id>') def user_profile(id): return f"用户{id}的个人页"
额外优化说明
- 该钩子会在所有请求进入路由处理函数之前触发,自动完成Host校验和重定向,原请求的路径、查询参数、HTTP方法都不会被改变
- 本地开发时如果需要用localhost、127.0.0.1访问,可以加环境变量判断跳过重定向,避免本地调试受阻:
import os @app.before_request def check_canonical_host(): # 开发环境跳过重定向校验 if os.getenv("FLASK_ENV") == "development": return if request.urlparts.netloc != CANONICAL_HOST: redirect_url = request.urlparts._replace(netloc=CANONICAL_HOST).geturl() return redirect(redirect_url, 301)
- 如果站点访问量较大,也可以选择在Nginx等反向代理层配置重定向规则,性能会优于应用层处理。
内容的提问来源于stack exchange,提问作者neurino
相关产品推荐
相关产品推荐

