Nginx - 如何重定向索引/根页面但保留所有其他路径?

Nginx - 如何重定向索引/根页面但保留所有其他路径?

我有一个 nginx kubernetes pod/ingress 托管一个网站example.com,目前它是一个相对无样式的主页。我还有一些其他路径需要保留(即:example.com/.well-known/assetlinks.json由移动应用程序用来验证应用程序链接...该文件需要保持在那里可用(不可能在重定向域中托管该文件)。我希望任何其他请求,特别是example.com重定向到different.site.com

我有一个 html 重定向正在运行,但由于重定向的延迟,它并不理想。

我使用 k8s 注释进行了永久重定向

kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
       rewrite ^/ https://different.site.com permanent;

通常这种方法是可行的,但是对 assetlinks 文件的任何请求都会被重定向,从而破坏应用程序链接。

我一直在使用 Ingress 规则,将pathType值从 Prefix 更改为 Exact,看看是否能得到想要的结果,但到目前为止还没有运气。

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: |
       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

如果有人知道该怎么做,我将不胜感激。

答案1

我会location为此使用一个块。但是,我不清楚如何将此 YML 配置转换为 nginx 配置。

在 nginx 配置中,该块如下所示:

location = / {
    return 301 https://different.example.com;
}

如果你无法实现该location块,那么你可以使用这个重写:

rewrite ^/$ https://different.example.com permanent;

^表示匹配字符串的开头,而$表示匹配字符串的结尾。总的来说,这意味着只有/位置符合正则表达式的匹配。

相关内容