使用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