要使用nginx提供的正则表达式名字,那么在编译安装nginx时必须首先安装Perl编程语言正则表达式(PCRE)。为了使用正则表达式,在服务器名字开始之前使用一个波浪号字符“~”:
|
server_name ~^www\d+\.nginx\.net$; |
否则,就会被作为准确的名字来对待,或者是如果在表达式中包含一个星号(*),那么就会被作为一个通配符名字(最有可能成为无效的名字)。不要忘记设置锚符号“^” 和“$”,它们不需要在语法,而是在逻辑上。同样要注意的是,在域名中的点号“.”要使用反斜线进行转义。另外,一个包含有“{” 和 “}”的正则表达式要使用引号:
|
server_name
"~^(? |
否则,nginx将会在启动时失败,并且会显示出以下错误信息:
|
directive "server_name" is not terminated by ";" in ... |
被捕获的命名正则表达式(named regular expression)在以后可以作为变量:
|
server {
server_name ~^(www\.)?(?
location / { root /sites/$domain; } } |
PCRE库支持命名捕获(named capture),遵循下列语法:
|
?<name> |
兼容Perl 5.10语法,从PCRE-7.0开始支持 |
|
?'name' |
兼容Perl 5.10语法,从PCRE-7.0开始支持 |
|
?P<name> |
Python语法兼容,从PCRE-4.0开始支持 |
如果nginx启动失败并显示如下错误消息:
|
pcre_compile() failed: unrecognized character after (?< in ... |
这个消息的意思是说PCRE库太旧,你应该尝试一下语法“?P<name>”。
另外在使用捕获时,也可使用数字形式:
|
server { server_name ~^(www\.)?(.+)$;
location / { root /sites/$2; } } |
然而,这种使用方法仅限于简单的情况(如上述),因为数字的引用能够很容易地被覆盖。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27043155/viewspace-732082/ ,如需转载,请注明出处,否则将追究法律责任。