Nginx配置疑问:如何基于URL路径参数返回自定义问候字符串?
Nginx配置疑问:如何基于URL路径参数返回自定义问候字符串?
嗨,很高兴看到你开始学习Nginx!你的思路方向是对的,但配置里有几个小细节没处理好,导致没法实现你想要的效果,我来帮你拆解下问题:
你当前配置的问题点
- 正则表达式写错了:你写的
location ~/greet/(user+)里,user+的意思是匹配user后面跟着一个或多个r的字符串(比如userrr),而不是任意用户名。另外~和后面的路径之间最好加个空格,避免Nginx解析出错。 - 变量赋值不对:你用
set $user user;是把$user固定成了字符串user,完全没用到正则捕获到的用户名。Nginx里正则捕获的分组是用$1、$2这类变量来引用的,第一个捕获到的内容就是$1。
正确的配置写法
把你的location块改成下面这样就可以实现需求了:
location ~ ^/greet/(.+)$ { return 200 'Hello $1'; }
简单解释下这个配置:
^/greet/(.+)$:^表示路径的开头,$表示路径的结尾,确保只会匹配/greet/xxx这种完整格式的请求;(.+)用来捕获/greet/后面的任意非空字符串(也就是你的用户名),这个捕获到的内容会存在$1变量里。return 200 'Hello $1';:直接返回200状态码,同时把$1替换成捕获到的用户名,拼接成问候字符串返回。
最后别忘了测试生效
修改完配置后,先执行sudo nginx -t检查配置文件有没有语法错误,确认没问题后再用sudo systemctl reload nginx重新加载Nginx配置,之后访问localhost/greet/john或者localhost/greet/merry就能看到对应的问候语啦!
备注:内容来源于stack exchange,提问作者belmont
相关产品推荐
相关产品推荐

