我有一个开发服务器设置,可以进行一些动态生根,允许我通过检测server_name中的域和子域并使用它来设置root来设置快速测试项目。
server_name ~^(?<subdomain>\w*?)?\.?(?<domain>\w+\.\w+)$;
这很好用,允许我根据变量$ subdomain和$ domain
设置根路径对于特定类型的项目,我还需要能够进一步将子域变量拆分为两个变量,如果子域包含破折号的话。
e.g。
mysubdomain 不应拆分,但保持为变量 $ subdomain ,
但 mysubdomain-tn 将分为2个变量 $ subdomain 和 $ version
答案 0 :(得分:5)
您需要更多地复杂化正则表达式:
server_name ~^(?<subdomain>\w*?)(-(?<version>\w*?)?)?\.?(?<domain>\w+\.\w+)$;
修改强>:
有几种方法可以调试Nginx配置,包括debugging log,echo module,在某些极端情况下甚至可以使用真实的debugger。但是,在大多数情况下,在响应中添加custom headers足以获取必要的信息。
例如,我使用这个简单的配置测试了上面的正则表达式:
server {
listen 80;
server_name ~^(?<subdomain>\w*?)(-(?<version>\w*?)?)?\.?(?<domain>\w+\.\w+)$;
# Without this line your browser will try to download
# the response as if it were a file
add_header Content-Type text/plain;
# You can name your headers however you like
add_header X-subdomain "$subdomain";
add_header X-domain "$domain";
add_header X-version "$version";
return 200;
}
然后我将域mydomain.local,mysubdomain-tn.mydomain.local和mysubdomain-tn.mydomain.local添加到我的hosts文件中,在带有打开调试面板的浏览器中打开它们(在大多数浏览器中为F12)得到了results。