Nginx 配置实现 /foo 和 /foo/ 的重定向

84次阅读
没有评论

问题描述

希望在Nginx中配置,使得请求 http://domain/foohttp://domain/foo/ 都能访问同一个资源。当前的配置如下:

location / {
    rewrite /(.*) /ipns/QmdpoFuwY/$1 break;
    proxy_pass http://127.0.0.1:8080;
}

在这个配置下,当使用以下命令访问时:

curl -X GET http://domain.io/foo/

可以得到资源的返回。然而,当使用以下命令访问时:

curl -X GET http://domain.io/foo

则会出现一个 Path Resolve 错误。

解决方案

请注意以下操作可能会因版本差异而有所不同,建议在操作前备份配置文件。
在Nginx中实现同时处理 /foo/foo/ 的请求需要对配置进行适当的修改。以下提供了两种方案供选择,你可以根据实际需求选取其中之一。

方案1:使用修改后的 rewrite 规则

通过修改 rewrite 规则,可以实现同时处理 /foo/foo/ 请求,将不带斜杠的请求重定向到带斜杠的请求,以保持统一的访问形式。你可以在当前的配置中应用以下修改:

location / {
    rewrite ^(.*[^/]) /ipns/QmdpoFuwY/$1/ break;
    proxy_pass http://127.0.0.1:8080;
}

在这个修改后的配置中,我们使用了修改后的 rewrite 规则,通过添加斜杠来处理不带斜杠的请求。这将确保不带斜杠的请求也能正确地指向相应的资源。

方案2:使用 proxy_pass 直接映射

另一种方法是直接在 proxy_pass 中映射两种请求的目标地址。这样可以避免使用 rewrite 规则,将请求直接映射到所需的地址。以下是配置的修改示例:

location / {
    proxy_pass http://127.0.0.1:8080/ipns/QmdpoFuwY/;
}

在这个配置中,我们直接在 proxy_pass 中指定了目标地址,并将 /foo/foo/ 请求都映射到同一个目标地址,从而实现统一的访问方式。

无论选择哪种方案,都可以实现 /foo/foo/ 请求的统一处理。请根据实际情况选择适合的方案,并在修改配置前进行必要的备份。

希望这些解决方案能够帮助你实现所需的功能。如果需要进一步调整或有其他问题,请随时提问。

正文完