Мы создаем сайт, состоящий только из статических файлов (используя Собрать).
Расширение .html в URL-адресах выглядит как девяностые, поэтому мы генерируем каждый статический HTML-файл в его собственном каталоге и называем его index.html. Например, URL http://www.example.com/foo/bar/ находится в файле /var/www/foo/bar/index.html
.
Это работает хорошо, но меня беспокоит одна мелочь: теперь есть два возможных URL-адреса одного и того же ресурса:
Случайно кто-то может дать ссылку на форму index.html URL, что плохо для SEO и выглядит некрасиво (помните девяностые?).
Возможно ли в Nginx выдать ошибку 404 на URL index.html, но обслужить URL с косой чертой?
Я пробовал это:
location ~ /index\.html$ {
return 404;
}
Но похоже, что Nginx выполняет внутреннюю перезапись URL-адреса с косой чертой в URL-адрес index.html, а затем сопоставляет это местоположение, поэтому мы получаем 404 даже для URL-адреса с косой чертой.
Обратите внимание, что для обнаружения ошибок мы хотим, чтобы URL-адреса index.html были ошибка, а не просто перенаправление на URL-адрес с косой чертой.
Для index.html существует внутреннее перенаправление, так как это значение по умолчанию. index
; то /
запрос перенаправляет на /index.html
который настроен на возврат 404.
Вы можете проверить ngx_http_index_module документация чтобы лучше понять. Ваш случай задокументирован.
Подходом к вашей проблеме было бы переименовать все index.html
к foo.bar
и добавьте это имя файла по умолчанию index
location / {
index foo.bar;
}