Answers:
没有内置的方式可以正确隔离这样的重写配置。您可以采用三种方法。
该地图模块,您可以包括一个单独的文件映射。更改文件后,仍必须重新加载Nginx,并且映射文件在语法上必须正确,但是确实限制了操作范围。
nginx.conf
:
map $uri $new {
include /etc/nginx/marketing.map;
}
server {
...
if ($new) {
rewrite ^ $new redirect;
}
...
}
marketing.map
:
/about /company/about-us;
~^/people/(?<person>.*)$ /company/people/$person;
首先是编写一个脚本,将重定向从您定义的某种格式转换为nginx配置。例如,给定一个用空格分隔的重定向列表:
/foo/(.*) /bar/$1
和一个脚本:
#!/bin/sh
while read SOURCE DEST; do
echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf
形成以下配置:
rewrite /foo/(.*) /bar/$1 permanent;
然后,您希望nginx -t
在整个配置上运行以在重新加载之前检查其是否有效。
第二种选择是使用ngx_lua,ngx_perl或ngx_js在nginx本身中实现读取和处理重定向配置。例如,该rewrite_by_lua
指令允许您执行Lua代码以构造重写。但是,您需要注意性能,因为您将为每个请求解释代码。