只有在没有参数的情况下,我才会尝试从位置进行重定向。如果有参数,服务器应返回带有该参数的URI。
我尝试了此选项,但使用此设置,从不带参数的页面进行的重定向正常运行,并且带参数的URL返回404:
location = /foo/ { if ($args = "") { return 301 domain.com; } }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您希望在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服务使更改生效。