我试图在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;
但我不知道如何将它们组合起来,以便:
- 所有重定向都将添加尾随的
/
- 除非URL中有
.
- 且不以'/no-尾斜杠URL 开头
使用multi-line flag
:
^(.*)(/(?!no-trailing-slash)([^./])+)$
将匹配项替换为:
$1$2/
模式匹配在最后一个/
之后既没有.
,也没有以特定模式开始并在它们的末尾添加/
的任何内容。
检查演示
我实际上是在HFZ的正则表达式示例的帮助下弄清楚的。我使用这个,它工作完美:
^((?!no-trailing-slash)([^.]*[^/]))$
并替换为:
$1/