You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx跨域名301重定向问题求助:特定URL跳转失效

解决Nginx特定URL重定向失效的问题

我来帮你搞定这个Nginx重定向的问题~你要实现的是把http://domain1/event/ert123精准跳转到http://domain2/event/dfe456,之前的配置没生效大概率是匹配规则或者写法的问题,下面给你具体的解决方案和排查要点:

一、精准匹配的正确配置

因为你的需求是针对特定单个URL的重定向,用精确匹配的location =是最稳妥的,不会误伤其他路径。把这段配置加到你的Nginx server块里:

server {
    listen 80;
    server_name domain1;  # 确保这里是你的目标域名domain1

    # 精确匹配 /event/ert123 这个路径,完全匹配才会触发重定向
    location = /event/ert123 {
        return 301 http://domain2/event/dfe456;  # 301是永久重定向,需要临时跳转的话改成302
    }

    # 如果domain1还有其他正常业务请求,保留原有的location配置
    location / {
        # 比如代理到后端服务或者返回静态资源
        # proxy_pass http://your_backend_service;
    }
}

二、如果需要保留URL参数的情况

如果你的请求可能带参数(比如http://domain1/event/ert123?name=test),想要把参数也带到新域名上,就把上面的location改成这样:

location /event/ert123 {
    return 301 http://domain2/event/dfe456$is_args$args;
}

这里$is_args会判断原URL是否有参数,有就加?,没有就空;$args会带上原有的参数内容。

三、排查配置失效的常见原因

  • 没重载Nginx配置:修改完配置后一定要执行sudo nginx -s reload,让新配置生效,不然还是用旧规则。
  • 浏览器缓存干扰:如果之前测试过错误的重定向,浏览器可能缓存了旧的301规则,建议用无痕模式打开页面测试,或者清除浏览器缓存。
  • server_name不匹配:检查server_name是不是准确写了domain1,如果是泛域名要加*.domain1之类的,但你的情况是精准域名,直接写domain1就行。
  • location匹配优先级问题:如果你之前的配置里有其他更优先的location规则(比如正则匹配的location ~),可能会覆盖这个精确匹配,确保精确匹配的location =放在其他同路径匹配规则的前面。

按上面的步骤改完,应该就能正常跳转啦~

内容的提问来源于stack exchange,提问作者Prithviraj Mitra

火山引擎 最新活动