LoginSignup
20
14

More than 5 years have passed since last update.

NginxによるTrailingSlashのメモ

Posted at

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条件で記載できるのだろうが、複雑化する可能性が高く追加が手間なのでフラグを使う

参考:
ScaleScale Tips/Nginx

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14