免费工具 301 重定向规则生成器
一行一条,先写旧地址再写新地址,复制 Nginx(宝塔面板可用)、Apache、Cloudflare、Vercel 或 Netlify 的规则。生成之前先把整份清单查一遍:跳到另一个跳转的链式跳转、死循环、同一个网址跳到两个地方、带不带斜杠的重复。
- 7 种输出格式
- 拉直链式跳转,拦下死循环
- 本地生成
从清单生成重定向规则
示例是一次小型网站改版:有一条链式跳转、一条冲突、一个带参数的旧网址和一个旧域名。换成你自己的清单,比如从 Excel 里复制的两列。
旧地址在前、新地址在后,用空格、Tab、逗号或 -> 隔开。可以写路径(/old)或完整网址。行末加 301、302、307、308 可以单独指定这一行的状态码。
永久搬迁用 301 或 308;只有真正临时的才用 302 或 307。
旧网址上的 ?utm_source=… 等参数怎么处理。
Cloudflare 规则需要主机名;也用来区分自己的网址和其它域名。
重定向
6
写进规则的条数
链式跳转
1
清单里发现的
跳过的行
1
错误、重复、循环
# Generated by TapCub redirect generator
# Paste inside the server { } block of your site, then run: nginx -t && nginx -s reload
location = /old-pricing.html { return 301 /pricing$is_args$args; }
location = /news/2019/seo.html { return 301 /guides/seo$is_args$args; }
location = /blog/seo { return 301 /guides/seo$is_args$args; }
location = /blog/seo/ { return 301 /guides/seo$is_args$args; }
if ($request_uri = /product.php?id=42) { return 301 /products/blue-mug; }
location = /about-us { return 301 /about$is_args$args; }
location = /about-us/ { return 301 /about$is_args$args; }
# Old host old.example.cn: a separate server block (add your listen / ssl_certificate lines)
server {
server_name old.example.cn;
location = /sale { return 301 https://example.cn/deals$is_args$args; }
location = /sale/ { return 301 https://example.cn/deals$is_args$args; }
}
复制进配置文件或直接下载。先在测试站试,再抽查几个旧网址的状态码。
检查结果
- 错误第 6 行「/about-us」在第 5 行已经跳到 /about。只用第一条:一个网址只能跳到一个地方。
- 提示第 2 行已拉直链式跳转:「/news/2019/seo.html」现在直接跳到 /guides/seo,不再经过 /blog/seo/。
- 提示第 7 行有 1 行属于其它域名,已放进单独的 server 块,记得补上 listen 和证书配置。宝塔里可以给旧域名单独建一个站点再粘贴。
版本 v1.0更新于 更新记录
部署之前,检查帮你拦下了什么
多年改版累积下来的重定向清单很少是干净的。下面这些问题,工具是对整份清单查,而不是一行一行看。
链式跳转
A → B → C:旧网址跳到的页面又跳了一次。每一跳都多一次往返,Google 的爬虫最多跟 10 跳就放弃。开启「直接指向最终地址」后,A 会直接写成跳到 C。
死循环
A → B 且 B → A,或者更长的一圈。浏览器会报「重定向次数过多」。循环里的行会先排除,等你确定内容到底在哪个网址。
冲突和重复
同一个旧网址写了两次、目标不同。服务器只用第一条匹配,第二行永远不生效。Nginx 里两个相同的 location = 甚至会导致配置检查失败、无法重载。
末尾斜杠和参数
对服务器来说 /old 和 /old/ 是两个网址,工具可以一起覆盖。utm_source、百度推广的点击参数默认原样带过去,推广数据不会因为跳转断掉。
Google 把 301 和 308 当作「新网址应被收录」的强信号,302 和 307 是弱信号。百度站长平台另有「网站改版」工具,整站换域名或换目录结构时,在那里提交新旧网址对应规则。重定向上线后至少保留一年,外链和收藏夹会在很久之后还带来访问。
四步完成一次安全改版
写规则是容易的部分,测试才是防止掉流量的关键。
-
1
列出新旧网址
从统计报表、百度搜索资源平台、Search Console 或爬虫工具导出旧网址,给每个找到最接近的新页面。不要全部跳到首页。
-
2
粘贴并选平台
选网站实际运行的环境。用宝塔面板的选 Nginx(或 Apache),粘贴到「网站 → 设置 → 配置文件」的 server 块里;前面有 Cloudflare 的,规则在 CDN 上执行,请求不会到你的服务器。
-
3
处理检查结果
解决冲突和循环,让工具拉直链式跳转,再复制或下载。
-
4
部署并测试
Nginx 先
nginx -t检查再重载,然后打开几个旧网址,或用curl -I 旧网址确认状态码和 Location。
同一条重定向,五个平台的写法
同一条规则(/old-pricing → /pricing,301,保留参数)在各平台的写法。全部用精确匹配,/old-pricing-2024 不会被误伤。
- Apache mod_alias 的
Redirect是前缀匹配(/old 会连 /old/任何内容 一起跳),所以工具用精确匹配的RedirectMatch - .htaccess 里 RewriteRule 的匹配串不带开头的斜杠
- Nginx 的
return不会自动带参数,要写$is_args$args - 宝塔自带的「重定向」功能只有 301 / 302、要按条添加;批量迁移直接把生成的规则贴进配置文件更快
| 平台 | 规则 | 参数 |
|---|---|---|
| Apache(mod_rewrite) | RewriteRule ^old-pricing/?$ /pricing [R=301,L] | 默认保留;加 QSD 丢弃 |
| Apache(mod_alias) | RedirectMatch 301 "^/old-pricing/?$" "/pricing" | 总是保留 |
| Nginx / 宝塔 | location = /old-pricing { return 301 /pricing$is_args$args; } | 要写 $is_args$args |
| Cloudflare 批量(CSV) | example.cn/old-pricing,https://example.cn/pricing,301,TRUE,… | PRESERVE_QUERY_STRING 列 |
| Vercel | { "source": "/old-pricing", "destination": "/pricing", "statusCode": 301 } | 总是带上 |
| Netlify | /old-pricing /pricing 301 | 自动带上 |
示例清单经过检查后的样子
输入 7 行,输出 6 条规则。下面是每个问题行的处理结果(默认平台 Nginx)。
| 行 | 输入 | 结果 |
|---|---|---|
| 2–3 | /news/2019/seo.html → /blog/seo → /guides/seo | 拉直:第 2 行直接跳到 /guides/seo |
| 3 | /blog/seo/(带斜杠) | 也匹配 /blog/seo,所以第 2 行构成了链式跳转 |
| 4 | /product.php?id=42 | 用 if ($request_uri = …) 精确匹配参数,旧参数不再带过去 |
| 6 | /about-us → /company | 跳过:第 5 行已经把 /about-us 跳到 /about |
| 7 | https://old.example.cn/sale | 放进旧域名单独的 server 块 |
把平台换成 Cloudflare 批量重定向,第 4 行会被报出来:批量列表不能匹配参数。
会掉流量的重定向错误
大多来自一条一条地加规则,从来不看整份清单。
留着链式跳转
每次改版都多一跳,改了三次版的老链接可能要跳四次。把旧规则改成直接指向现在的网址。
全部跳到首页
跳到不相关的页面,Google 可能当作软 404 处理。给每个网址找最接近的新页面,实在没有就让它 404。
永久搬迁用了 302
302 告诉搜索引擎旧网址还会回来,旧网址可能继续被收录。永久搬迁用 301 或 308。
过早删掉重定向
外链、收藏夹、老的推广链接会在几年里持续带来访问。规则至少保留一年,能长期保留更稳妥。
找到真正需要跳转的网址
做重定向表最难的是知道哪些旧网址还有人访问。TapCub 能列出来,改版后还能对比流量。
301 重定向是什么?
一种 HTTP 响应:状态码 301,加一个 Location 头,告诉浏览器和搜索引擎页面已经永久搬到新地址。搜索引擎随后收录新网址,并把旧网址的权重信号合并过去。308 意思相同,但会保留请求方法(POST 仍是 POST)。
301 还是 308?302 还是 307?
Google 对 301 和 308 一视同仁:永久、强信号;302 和 307 是临时、弱信号。普通页面搬迁用 301;只有表单或接口会 POST 到旧网址时才需要 308。302、307 只用于维护之类的短期跳转。
宝塔面板怎么批量做 301?
宝塔自带的「重定向」要按条添加,并且只有 301 / 302 两种。批量时选 Nginx,把生成的规则粘贴进「网站 → 设置 → 配置文件」的 server { } 块里保存即可;用 Apache 的站点选 .htaccess 版本,放进网站根目录。
带参数的网址怎么跳转?
Apache 要用 RewriteCond 匹配 %{QUERY_STRING},Nginx 可以比较 $request_uri,Vercel 用 has 条件,Cloudflare 重定向规则可以判断 http.request.uri.query;Cloudflare 批量重定向完全不能匹配参数。工具会按平台写出对应写法。
参数要保留还是丢弃?
多数情况保留:UTM、百度推广和广告点击参数跳转后还在,推广效果不会算错。旧参数在新站上没有意义时丢弃,比如 ?id=42 的老商品页换成了干净的新网址。
网站改版要不要用百度的「网站改版」工具?
整站换域名、换目录结构时可以用:先在服务器上做好 301,再到百度搜索资源平台的「网站改版」提交新旧网址的对应规则,让百度知道这是一次改版。零散几个页面的跳转只做 301 即可。
清单会上传吗?
不会。全部在你的浏览器里生成,不会发给 TapCub,工具也没有分享链接。