企业门户改版需确保历史链接精准301跳转:域名迁移用独立server块配$request_uri;https需单独配置ssl;目录结构调整用location+return或rewrite,禁用if;上线前须nginx -t校验、curl测试响应头、隐身模式验证。

企业门户改版时,确保所有外部历史链接有效跳转,核心是让每个旧 URL 都精准、完整、永久地导向语义对应的新 URL,不丢路径、不丢参数、不跳首页、不循环、不 404。
必须保留 $request_uri
用户从搜索引擎、公众号、老文章点进来的链接,比如 https://old.com/products/123?utm_source=weibo,跳过去必须是 https://new.com/items/123?utm_source=weibo。
用 $request_uri(含路径 + 查询字符串),别用 $uri(不含 ? 后参数),更不能漏掉它写成 return 301 https://new.com/;——那样所有请求都压到首页,SEO 权重全丢。
按场景分三类配置,不混用、不套娃
-
域名整体迁移(如 old.com → new.com)
单独建一个 server 块,监听 80 端口,server_name 列全旧域名:server { listen 80; server_name old.com www.old.com old.cn www.old.cn; return 301 https://www.new.com$request_uri; }多个旧域名共用一条规则,不用重复写块。
-
HTTPS 也得覆盖(旧站曾支持 HTTPS)
新增一个监听 443 的 server 块,配好旧域名的 SSL 证书(通配符或 SAN 多域名证书更稳妥):server { listen 443 ssl; server_name old.com www.old.com; ssl_certificate /etc/nginx/ssl/old.com.crt; ssl_certificate_key /etc/nginx/ssl/old.com.key; return 301 https://www.new.com$request_uri; }没配 HTTPS 跳转,用户点书签里的
https://old.com/about就会卡在证书错误页,不是跳转失败,而是根本没走到 Nginx 逻辑。 -
目录或页面结构调整(如 /news/ → /blog/,/contact.php → /contact)
放在新站的 server 块里,用 location + return 或 rewrite:- 单页精确跳转(高效、无正则开销):
location = /about.html { return 301 /company/; } - 目录批量迁移(用 rewrite 提取路径):
location ^~ /news/ { rewrite ^/news/(.*)$ /blog/$1 permanent; } - 去后缀(兼容旧 PHP 页面):
location ~ \.php$ { rewrite ^(/.*?)(?:\.php)(\?.*)?$ $1$2 permanent; }别把这类规则塞进 if 块——Nginx 官方明确不推荐,易出循环和匹配异常。
- 单页精确跳转(高效、无正则开销):
上线前必须做的三件事
- 运行
nginx -t检查语法,尤其注意return行末尾有没有分号 - 用
curl -I http://old.com/some-old-path?ref=test看响应头,确认含HTTP/1.1 301 Moved Permanently和正确的Location - 浏览器测试用隐身窗口,避免本地强缓存掩盖问题
不复杂但容易忽略











