You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:24:04