我有一个网站,需要更改 URL 结构。旧 URL 看起来像/olddir/part1_de.htm
,新 URL 看起来像/newdir/sub/category/anotherpage.htm
。我需要进行大量 URL 重写,我估计最终大约需要进行 500 次不同的重写。
由于我的网站流量很大,我目前主要关心的是性能。我的问题是:
- 我假设对于每个请求,都会解析重写块并评估正则表达式。我是对的吗?
- 如果我使用这些重写,性能会受到影响吗?nginx 可以处理这个问题吗?
- 在进行大量重写时是否有任何“最佳实践”可供遵循?
答案1
您可能会发现地图模块以获得更好的性能,特别是如果大多数 URL 实际上不需要正则表达式。例如(未测试):
map $uri $new {
/olddir/part1_de.htm /newdir/sub/category/anotherpage.htm;
~^/olddir/part(?<num>[0-9]+)_en.htm$ /newdir/sub/category/part$num;
...
}
if ($new) {
rewrite ^ $new permanent;
}
答案2
Nginx 在初始启动或配置重新加载时(而不是每次请求时)将其配置编译为某种二进制树。因此可以使用重写,但推荐的选项和最佳实践是尽可能使用 try_files 指令。