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

Ana*_*ime 9 rewrite nginx redirect

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

我已经设法使其符合以下规则:

rewrite ^/old-category/(.*) /new-category/$1;
Run Code Online (Sandbox Code Playgroud)

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

rewrite ^/old-category/(.*)$ /new-category/$1;
Run Code Online (Sandbox Code Playgroud)

另外,我想重定向用户,如果他们只是写旧的类别名称(没有产品),我应该为类别重定向创建一个新规则还是我可以编辑上面的当前规则以在这两种情况下工作。

提前感谢您的回答。

Mr *_*unz 9

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

这个

rewrite ^/old-category/(.*) /new-category/$1;
Run Code Online (Sandbox Code Playgroud)

和这个

rewrite ^/old-category/(.*)$ /new-category/$1;
Run Code Online (Sandbox Code Playgroud)

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

$当你想匹配字符串终止是有用的结束在具体的方式,例如

rewrite ^/old-category/(.*)\.php$ /new-category/$1;
Run Code Online (Sandbox Code Playgroud)

重写PHP 文件

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

http://example.com/old-category/
Run Code Online (Sandbox Code Playgroud)

对此

http://example.com/new-category/
Run Code Online (Sandbox Code Playgroud)

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

  • 好问题,好回答。许多人默认设置了 $(或默认不使用它)而没有考虑它的实际含义。每次看到 (.*)$ 我都会畏缩。我没有尝试过,但实际上可能是在这种情况下省略 $ 可能会有*稍微*更好的性能,因为这是正则表达式必须检查的另一条规则。得到这个问题的答案会很有趣:D (3认同)