开发者社区 问答 正文

如何仅在nginx上不使用查询参数的情况下进行重定向?

只有在没有参数的情况下,我才会尝试从位置进行重定向。如果有参数,服务器应返回带有该参数的URI。

我尝试了此选项,但使用此设置,从不带参数的页面进行的重定向正常运行,并且带参数的URL返回404:

location = /foo/ { if ($args = "") { return 301 domain.com; } }

展开
收起
被纵养的懒猫 2019-09-25 16:01:46 458 分享 版权
阿里云 AI 助理回答

根据您的描述,您希望在Nginx配置中实现这样的重定向逻辑:当访问的URL不带参数时,进行重定向到一个新的域名;而如果URL带有参数,则服务器应返回一个包含这些参数的URI,而不是返回404错误。您的配置尝试可能没有完全达到预期效果,特别是处理带参数的情况。

要实现您的需求,可以调整Nginx配置中的location块和if条件语句,确保正确处理带参数的请求。下面是一个修改后的示例配置,旨在解决您的问题:

server {
    # ... 其他配置 ...

    location /foo/ {
        if ($args != "") {
            # 如果URL有参数,重新构建带有参数的完整URI并返回
            return 301 $scheme://domain.com/foo/$uri?$args;
        }

        # 当URL无参数时执行重定向
        return 301 $scheme://domain.com;
    }

    # ... 其他location块和配置 ...
}

在这个配置中,我们首先检查$args变量(它包含URL中的查询参数),如果它不为空(即有参数),则使用return 301指令构造一个包含当前路径(通过$uri获取)和所有参数(通过$args获取)的新URI,并重定向到domain.com。注意这里使用了$scheme来保持协议(http或https)的一致性。

如果URL没有参数(即$args = ""),则直接重定向到domain.com,这与您的原始意图一致。

请记得将上述代码片段嵌入到您的Nginx server配置块中适当的位置,并且在应用任何更改后测试配置的正确性,以避免服务中断。通常,使用nginx -t命令可以检查配置文件是否有语法错误,然后通过重新加载或重启Nginx服务使更改生效。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答