使用Nginx关于TrailingSlash的笔记

尾斜杠

一如既往的个人笔记
nginx的笔记不断增加
尾斜杠是附加在URL末尾的“/”,设置方法如下

目标

在配置中给nginx添加TrailingSlash。
在此过程中,特定的路径不要添加TrailingSlash,需要对添加进行判断。

考试 shì)

0. 测试环境

在测试时假设路径配置如下,使用不存在的/example/ccc和/example/aaa/bar.png。

.
└── example
    ├── aaa
    │   ├── foo
    │   ├── hoge.jpg
    │   └── index.html
    ├── bbb
    │   ├── foo
    │   ├── hoge.jpg
    │   └── index.html
    └── index.html

1. 给予全部/的加上

rewrite ^(.*[^/])$ $1/ permanent;

由于在整个URL中添加了斜杠”/”,所以index.html也变成了index.html/
类似hoge.jpg也成为hoge.jpg/,从而导致404错误
即使访问不存在的/ccc或/aaa/bar.png等,也会变成/ccc/或/aaa/bar.png/

2. 不要在.jpg等扩展名的文件中添加。

rewrite ^([^.]+[^/])$ $1/ permanent;

index.html等保持不变
hoge.jpg等也保持不变
当访问/aaa或/bbb/foo时,会变为/aaa/或/bbb/foo/
即使访问不存在的ccc等,也会变为/ccc/
当访问/aaa/bar.png时,与hoge.jpg类似,保持/aaa/bar.png不变

3. 如果只想排除其中一个。

if ( $request_uri ~ "/aaa" ) {
   set $not_ignore false;
}
if ($not_ignore != false ) {
  rewrite ^([^.]+[^/])$ $1/ permanent;
}

/aaa/hoge.jpg 保持不变
/aaa/foo 也保持不变, 不带斜杠
/bbb/hoge.jpg 保持不变
/bbb/foo 变为 /bbb/foo/
/ccc/foo 变为 /ccc/foo/, /aaa/bar.png 变为 /aaa/bar.png

总结

将其形式化为类似于在$request_uri上匹配并设置标志的方式,与3类似。
虽然可以在location的rewrite条件中进行说明,但复杂度可能会增加,并且添加会变得繁琐,因此使用标志。

参考:ScaleScale Tips/Nginx

借鉴:ScaleScale 的技巧/Nginx

广告
将在 10 秒后关闭
bannerAds