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

Nginx Ingress配置咨询:仅重定向根页面且保留指定路径的实现方案

Nginx Ingress配置咨询:仅重定向根页面且保留指定路径的实现方案

嗨,我来帮你搞定这个Nginx Ingress的重定向问题!你现在的核心需求是让example.com的根请求重定向到different.site.com,但必须保留/.well-known/assetlinks.json这个路径不被重定向,对吧?之前的配置因为全局rewrite把所有请求都转走了,所以才会破坏App Links的验证,咱们来调整一下配置就能解决。

方案一:调整Rewrite规则,排除指定路径

你可以在configuration-snippet里给rewrite加个条件,只有当请求的URI不是/.well-known/assetlinks.json的时候,才执行根路径的重定向。这样就能精准避开需要保留的路径了。

修改后的Ingress配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: applinks-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($uri != "/.well-known/assetlinks.json") {
        rewrite ^/$ https://different.site.com permanent;
      }
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - example.com
    secretName: applinks-tls
  rules:
  - host: example.com
    http:
      paths:
      - pathType: Exact
        path: /
        backend:
          service:
            name: applinks-service
            port:
              number: 80
      - pathType: Exact
        path: /.well-known/assetlinks.json
        backend:
          service:
            name: applinks-service
            port:
              number: 80

这里的关键是把rewrite的匹配规则改成^/$(只严格匹配根路径),再加上if条件排除assetlinks的URI,这样就不会误重定向那个关键文件了。

方案二:利用Ingress路径优先级+定向重注解

另一种更清晰的方式是去掉全局的rewrite snippet,转而给根路径单独配置重定向注解。因为Ingress的路径是按顺序匹配的,精确匹配的路径优先级最高,所以把assetlinks的路径放在前面,根路径用专属注解处理重定向。

配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: applinks-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    kubernetes.io/ingress.class: "nginx"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - example.com
    secretName: applinks-tls
  rules:
  - host: example.com
    http:
      paths:
      - pathType: Exact
        path: /.well-known/assetlinks.json
        backend:
          service:
            name: applinks-service
            port:
              number: 80
      - pathType: Exact
        path: /
        backend:
          service:
            name: applinks-service
            port:
              number: 80
        annotations:
          nginx.ingress.kubernetes.io/permanent-redirect: "https://different.site.com"

这个方案里,当请求匹配到/.well-known/assetlinks.json时,会直接转发到你的服务;而根路径/的请求会触发注解里的永久重定向,其他未匹配的路径(如果有的话)会按默认逻辑处理,完全不会影响assetlinks的访问。

小提示

应用配置后,可以用kubectl describe ingress applinks-ingress检查注解和路径是否生效,也可以用curl分别测试两个路径的响应:

  • 测试根路径:curl -I https://example.com,应该返回301重定向到目标站点
  • 测试assetlinks:curl -I https://example.com/.well-known/assetlinks.json,应该返回200正常响应

备注:内容来源于stack exchange,提问作者RonManning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:23:04