
本文介绍通过反向代理(如 Cloudflare Workers)将 https://www.mydomain123.com/wAzclnp3 映射到真实后端 API(如 https://my-backend-api-server.../redirectapp/redirect/wAzclnp3),从而隐藏敏感地址、提升 URL 可读性与安全性,无需修改 Django 应用本身。
本文介绍通过反向代理(如 cloudflare workers)将 `https://www.mydomain123.com/wazclnp3` 映射到真实后端 api(如 `https://my-backend-api-server.../redirectapp/redirect/wazclnp3`),从而隐藏敏感地址、提升 url 可读性与安全性,无需修改 django 应用本身。
在 Django 中直接“重写”或“隐藏”外部 API 的原始 URL 是不可行的——Django 作为应用层框架,无法改变浏览器地址栏显示的域名,也无法拦截并改写跨域请求的目标地址。真正安全、灵活且生产可用的方案是在 DNS 和 HTTP 网关层实现反向代理,让用户始终访问你的自有域名(如 www.mydomain123.com),而由边缘网络(如 Cloudflare Workers、Nginx、Traefik 或 CDN)负责将特定路径转发至真实后端,并统一处理响应。
以下是以 Cloudflare Workers 为例的完整实践方案(兼容 Django 前端与后端分离架构):
✅ 核心路由逻辑设计
- https://www.mydomain123.com/wAzclnp3 → 代理至 https://my-backend-api-server.us-central1.run.app/redirectapp/redirect/wAzclnp3,返回 302 重定向
- https://www.mydomain123.com/ 或 /otherapp → 代理至你的静态站点(如 GitHub Pages 或 Django 前端部署地址)
- /static/、/assets/ 等资源路径 → 直接代理静态资源,避免 CORS 问题
✅ 示例 Worker 脚本(已优化可读性与健壮性)
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
const path = url.pathname;
// ✅ 短链接路由:/wAzclnp3 → 后端解析 + 302 重定向
if (path.length > 1 && !path.includes('.')) {
const hash = path.slice(1); // 去掉开头 '/'
const backendUrl = `https://my-backend-api-server.us-central1.run.app/redirectapp/redirect/${hash}`;
try {
const res = await fetch(backendUrl, {
method: 'GET',
headers: { 'Accept': 'application/json' },
});
if (res.status === 200) {
const data = await res.json();
const target = data.long_url || data.url;
if (!target) throw new Error('Missing long_url in response');
return Response.redirect(target, 302);
} else if (res.status === 404) {
return new Response('Not found', { status: 404 });
} else {
throw new Error(`Backend error: ${res.status}`);
}
} catch (err) {
console.error('Redirect failed:', err);
return new Response('Short link unavailable', { status: 503 });
}
}
// ✅ 静态资源代理(CSS/JS/Images)
if (path.startsWith('/static/') || path.startsWith('/assets/')) {
const staticUrl = `https://myaccount.github.io/personal_website${path}`;
return fetch(staticUrl, { cf: { cacheTtl: 3600 } });
}
// ✅ 默认代理:前端页面(支持 SPA 的 404 fallback)
const frontendUrl = `https://myaccount.github.io/personal_website${path}`;
try {
let res = await fetch(frontendUrl);
if (res.status === 404 && path !== '/') {
// SPA 路由兜底:返回 index.html 让前端 Router 处理
res = await fetch(`https://myaccount.github.io/personal_website/index.html`);
}
const headers = new Headers(res.headers);
headers.set('Access-Control-Allow-Origin', '*');
return new Response(res.body, {
status: res.status,
headers,
});
} catch (err) {
return new Response('Frontend unavailable', { status: 503 });
}
}
⚠️ 关键注意事项
- Django 后端无需改动:只需确保 /redirectapp/redirect/{hash} 接口返回标准 JSON(如 { "long_url": "https://example.com" }),不主动重定向(由 Worker 统一做 302),避免跳转链路失控。
- 域名 CNAME 配置:将 www.mydomain123.com 在 DNS 中 CNAME 指向 Cloudflare 提供的 workers.dev 子域,并启用代理(橙色云图标)。
- HTTPS 强制与缓存策略:Cloudflare 自动提供 HTTPS;建议对静态资源设置 cf.cacheTtl,对短链跳转禁用缓存(默认不缓存 302)。
- 安全性增强:可在 Worker 中添加 Referer 校验、速率限制(cf.waitUntil() + KV)、或签名验证(如 ?sig=xxx),防止恶意批量解析。
- 替代方案:若不用 Cloudflare,可用 Nginx 作反向代理(location / { proxy_pass https://github.io; } + location ~ ^/[a-zA-Z0-9]{4,}$ { proxy_pass https://backend; }),原理一致。
该方案解耦清晰、零侵入 Django 代码、兼顾 SEO 与用户体验,是现代短链接服务的标准架构选择。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










