Trailing Slash
いつものように個人的なメモ
nginxのメモばかり増えていく
Trailing SlashとはURLの末尾につける「/」、その設定方法
目的
nginxでTrailingSlashを付与する設定
その際に特定のパスはTrailingSlashを付けない、付けるの判断をする
テスト
0. テスト環境
パス構成を下記の様に想定
テスト時に存在しない /example/ccc と /example/aaa/bar.png を使用する
. └── example ├── aaa │ ├── foo │ ├── hoge.jpg │ └── index.html ├── bbb │ ├── foo │ ├── hoge.jpg │ └── index.html └── index.html
1. 全部 / を付与する
nginx.conf
rewrite ^(.*[^/])$ $1/ permanent;
全URLに / が付与されるので index.html も index.html/ になる
hoge.jpg なども hoge.jpg/ となり404になる
存在しない /ccc や /aaa/bar.png などにアクセスしても /ccc/ や /aaa/bar.png/ となる
2. .jpg等の拡張子・ファイルには付けない
nginx.conf
rewrite ^([^.]+[^/])$ $1/ permanent;
index.html などはそのまま
hoge.jpg などもそのままになる
/aaa や /bbb/foo にアクセスすると /aaa/ や /bbb/foo/ となる
存在しない ccc などにアクセスしても /ccc/ となる
/aaa/bar.png へアクセスした際は hoge.jpg と同じように / 無しで /aaa/bar.png のまま
3. 一部のみ除外したい場合
nginx.conf
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 といった形になる
まとめ
3のように $request_uriでマッチさせてフラグを立てると行った形にしている。
locationに記載するrewrite条件で記載できるのだろうが、複雑化する可能性が高く追加が手間なのでフラグを使う