Назад | Перейти на главную страницу

Nginx: запретить index.html в URL

Мы создаем сайт, состоящий только из статических файлов (используя Собрать).

Расширение .html в URL-адресах выглядит как девяностые, поэтому мы генерируем каждый статический HTML-файл в его собственном каталоге и называем его index.html. Например, URL http://www.example.com/foo/bar/ находится в файле /var/www/foo/bar/index.html.

Это работает хорошо, но меня беспокоит одна мелочь: теперь есть два возможных URL-адреса одного и того же ресурса:

  1. http://www.example.com/foo/bar/ (косая черта URL)
  2. http://www.example.com/foo/bar/index.html (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;
}