Nginx产品从旧类别到新类别的简单重定向


9

我正在将产品从旧类别重定向到新类别。

我设法使其遵循以下规则:

rewrite ^/old-category/(.*) /new-category/$1;

但是我想知道何时应该使用“结束行”符号$,在我的情况下,使用或不使用它有什么区别。例如:

rewrite ^/old-category/(.*)$ /new-category/$1;

另外,如果用户只是写旧的类别名称(不带产品),我也想重定向用户,应该只为类别重定向创建新规则,还是可以编辑上面的当前规则在两种情况下都可以使用。

预先感谢您的回答。

Answers:


9

按顺序回答您的问题...

这个

rewrite ^/old-category/(.*) /new-category/$1;

和这个

rewrite ^/old-category/(.*)$ /new-category/$1;

如所写是等效的。该.*规则匹配“所有”的0个或多个,因此$冗余/不是真正需要的。

$当您想匹配以特定方式结尾的字符串时,终止符非常有用,例如

rewrite ^/old-category/(.*)\.php$ /new-category/$1;

重写PHP文件

至于您的第二个问题,如果我理解正确,您想将其重定向

http://example.com/old-category/

对此

http://example.com/new-category/

如果是这样,则该rewrite规则已完成,因为.*匹配零个或更多字符。


3
好问题,好答案。如此多的人默认设置$(或者默认不设置),而没有考虑它的实际含义。每次看到(。*)$,我都会畏缩。我没有尝试,但它实际上可能是在这种情况下离开了$可以有一个稍微更好的性能,因为它是另一个规则的正则表达式必须检查。得到这个问题的答案将很有趣:D
Broco
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.