[我的nginx配置似乎在语法检查中失败,即使this answer表示nginx使用PECR,并且this fiddle显示出弯括号在PECR下也可以工作(尽管它确实说PECR)。括号中的PHP ...)。
因此,如果我将其放在服务器下>位置块:
location / {
rewrite ^/([0-9]{4})$ /page.php;
}
我从Nginx的语法检查器中收到以下错误:
nginx:[emerg]指令“ rewrite”不以“;”终止在/ etc / nginx / sites-enabled / default:37
中nginx:配置文件/etc/nginx/nginx.conf测试失败
而且,如果我仅去除弯曲的部分,则将其保留为:
location / {
rewrite ^/([0-9])$ /page.php;
}
然后一切都很好:
nginx:配置文件/etc/nginx/nginx.conf的语法没问题
nginx:配置文件/etc/nginx/nginx.conf测试成功
那么,这到底是什么问题,如何使我的URL重写器接受URL重写规则中的特定4位数字?
rewrite
:[如果正则表达式包含“}”或“;”人物,整体表达式应该用单引号或双引号引起来。
}
和;
字符在Nginx配置文件中具有特殊含义,因此需要通过将表达式用引号引起来保护正则表达式内的使用。
同样适用于在location
,if
和map
指令(以及我可能忘记的任何其他指令)中出现的正则表达式。
例如:
rewrite "^/[0-9]{4}$" /page.php last;