From c2a6d491c6ee28f630e26d438de8aebf043be3d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Sun, 14 Dec 2025 20:11:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20robots.txt=20=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=EF=BC=8C=E7=A6=81=E6=AD=A2=E6=90=9C=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E7=B4=A2=E5=BC=95=EF=BC=8C=E5=A2=9E=E5=BC=BA=E9=9A=90?= =?UTF-8?q?=E7=A7=81=E4=BF=9D=E6=8A=A4=EF=BC=9B=E4=B8=BA=20HTML=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=B7=BB=E5=8A=A0=E9=98=B2=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/webui/webui_server.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/webui/webui_server.py b/src/webui/webui_server.py index 928824e0..9aeb303a 100644 --- a/src/webui/webui_server.py +++ b/src/webui/webui_server.py @@ -92,23 +92,46 @@ class WebUIServer: logger.warning("💡 请确认前端已正确构建") return + # robots.txt - 禁止搜索引擎索引 + @self.app.get("/robots.txt", include_in_schema=False) + async def robots_txt(): + """返回 robots.txt 禁止所有爬虫""" + from fastapi.responses import PlainTextResponse + content = """User-agent: * +Disallow: / + +# MaiBot Dashboard - 私有管理面板,禁止索引 +""" + return PlainTextResponse( + content=content, + headers={"X-Robots-Tag": "noindex, nofollow, noarchive"} + ) + # 处理 SPA 路由 - 注意:这个路由优先级最低 @self.app.get("/{full_path:path}", include_in_schema=False) async def serve_spa(full_path: str): """服务单页应用 - 只处理非 API 请求""" # 如果是根路径,直接返回 index.html if not full_path or full_path == "/": - return FileResponse(static_path / "index.html", media_type="text/html") + response = FileResponse(static_path / "index.html", media_type="text/html") + response.headers["X-Robots-Tag"] = "noindex, nofollow, noarchive" + return response # 检查是否是静态文件 file_path = static_path / full_path if file_path.is_file() and file_path.exists(): # 自动检测 MIME 类型 media_type = mimetypes.guess_type(str(file_path))[0] - return FileResponse(file_path, media_type=media_type) + response = FileResponse(file_path, media_type=media_type) + # HTML 文件添加防索引头 + if str(file_path).endswith('.html'): + response.headers["X-Robots-Tag"] = "noindex, nofollow, noarchive" + return response # 其他路径返回 index.html(SPA 路由) - return FileResponse(static_path / "index.html", media_type="text/html") + response = FileResponse(static_path / "index.html", media_type="text/html") + response.headers["X-Robots-Tag"] = "noindex, nofollow, noarchive" + return response logger.info(f"✅ WebUI 静态文件服务已配置: {static_path}")