Nginx:如何添加一个尾斜杠到URL,除非它以特定的名称开始



我试图在nginx配置文件中添加重定向,如果用户在除特定URL之外的任何URL上着陆,它将在其后面添加尾随斜杠。此外,如果其中包含.,则不应添加尾斜杠。

的例子:

  • www.site.com/foo =比;www.site.com/foo/
  • www.site.com/foo/baz =比;www.site.com/foo/baz/
  • www.site.com/foo.xml =比;www.site.com/foo.xml(没有斜杠,因为url中有一个.)
  • www.site.com/no-trailing-slash =比;www.site.com/no-trailing-slash(这个URL没有特别的斜杠)

我已经看到了这个,它涵盖了我需要的大部分内容:

#add trailing slash to all URLs except if it contains a .
rewrite ^([^.])*[^/]$ $1/ permanent; 

我也弄清楚了如何不添加一个尾斜杠到一个特定的URL做这样的事情:

rewrite ^(?!no-trailing-slash).*[^/]$ $1/ permanent;

但我不知道如何将它们组合起来,以便:

  1. 所有重定向都将添加尾随的/
  2. 除非URL中有.
  3. 且不以'/no-尾斜杠URL
  4. 开头

使用multi-line flag:

^(.*)(/(?!no-trailing-slash)([^./])+)$

将匹配项替换为:

$1$2/

模式匹配在最后一个/之后既没有.,也没有以特定模式开始并在它们的末尾添加/的任何内容。

检查演示

我实际上是在HFZ的正则表达式示例的帮助下弄清楚的。我使用这个,它工作完美:

^((?!no-trailing-slash)([^.]*[^/]))$

并替换为:

$1/

最新更新