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

Nginx跨域名长URL重定向配置异常求助

Nginx跨域名URL重定向问题排查与解决

你的配置存在的核心问题

  • server_name字段误用:server_name只能用来匹配请求的主机域名,不能包含/education/7/abc-science这类URI路径。你把路径写进server_name后,Nginx会将其视为域名的一部分,这就是警告里"suspicious symbols"的来源,也导致请求根本无法被正确匹配。
  • return语句冗余追加路径:你的return指令里加了$request_uri,这会把原请求的完整URI再次追加到新链接末尾,最终生成重复路径的错误URL(比如https://www.test.com/education/7/abc-science/education/7/abc-science)。
  • 测试请求拼写错误:你测试时用的路径是/education/7/abc-scienc(少了最后一个字母e),和目标路径abc-science不一致,这也会导致匹配失效。

正确的实现方式:用location匹配路径

是的,必须通过location块来匹配具体的URI路径,结合server_name匹配旧域名,才能实现正确的跨域名重定向。以下是两种常用方案:

方案1:仅针对单个精确路径重定向

适合只需要重定向这一个特定URL的场景:

server {
    listen 80;
    # 由于ALB已完成HTTP转HTTPS,若Nginx部署在ALB后端,可无需配置listen 443,根据实际架构调整
    server_name qwerty.test.com;

    # 精确匹配目标路径,确保拼写完全一致
    location = /education/7/abc-science {
        # 直接将原URI映射到新域名,避免写死路径出错
        return 301 https://www.test.com$request_uri;
        # 也可以直接写死固定路径:return 301 https://www.test.com/education/7/abc-science;
    }
}

方案2:批量重定向旧域名下的所有/education/前缀路径

如果后续还有同前缀的URL需要重定向,可使用前缀匹配:

server {
    listen 80;
    server_name qwerty.test.com;

    # 前缀匹配所有/education/开头的请求
    location ^~ /education/ {
        return 301 https://www.test.com$request_uri;
    }
}

为什么之前测试得到错误结果?

因为你的server_name配置错误,Nginx无法匹配到这个自定义server块,转而使用了默认的server配置,所以重定向回了原地址。

内容的提问来源于stack exchange,提问作者Santosh Baruah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:45:59