перенаправить /foo.html в / foo, но не / в / index в nginx
Мои файлы на диске имеют расширения:,index.html
a.html
, Я хочу запроситьhttp://example.com/a
загрузить/var/www/a.html
а такжеhttp://example.com/
загрузить/var/www/index.html
, Я хочу, чтобы любой другой URL перенаправлялся на канонический URL, поэтомуhttp://example.com/a.html
следует перенаправить на.http://example.com/a
Моя конфигурация выглядит так:
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;
location / {
root /var/www;
try_files $uri.html $uri $uri/ =404;
}
Это перенаправляет/a.html
в/a
и преуспеть в загрузкеa.html
с диска:
$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
Location: http://www.jefftk.com/food
$ curl -s http://www.jefftk.com/food | grep ^Location
Но это отправляет/
к:/index
$ curl -s -D- http://www.jefftk.com/pictures/ | grep ^Location
Location: http://www.jefftk.com/pictures/index
$ curl -s -D- http://www.jefftk.com | grep ^Location
Location: http://www.jefftk.com/index
Если я удаляю правило перезаписи, оно перестает перенаправлять с/a.html
в/a
но и перестает отправлять/
к:/index
$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
$ curl -D- -s http://www.jefftk.com/food | grep ^Location
$ curl -D- -s http://www.jefftk.com/ | grep ^Location
$ curl -D- -s http://www.jefftk.com/pictures/ | grep ^Location
Почему это случилось? Могу ли я сделать nginx для обеих вещей, которые я хочу (нет.html
расширение, нетindex
в URL) одновременно?