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

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

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

Случайно кто-то может ссылаться на форму URL index.html, что плохо для SEO и выглядит некрасиво (помните девяностые годы?).

Можно ли в Nginx выдавать ошибку 404 на URL index.html, но обслуживать косую черту?

Я попробовал это:

location ~ /index\.html$ {
    return 404;
}

Но кажется, что Nginx выполняет некоторую внутреннюю перезапись URL-адреса косой черты в URL-адресе index.html, а затем сопоставляет это местоположение, поэтому мы получаем 404 даже для URL-адреса косой черты.

Обратите внимание, что для выявления ошибок мы хотим, чтобы URL index.html представлял собой ошибку, а не просто перенаправлял на косую черту.

1 ответ

Для index.html существует внутреннее перенаправление, так как оно используется по умолчанию index; / запрос перенаправляет на /index.html который установлен для возврата 404.

Вы можете проверить документацию ngx_http_index_module для лучшего понимания. Ваш случай задокументирован.

Подход к вашей проблеме будет переименовать все index.html в foo.bar и добавьте это имя по умолчанию index

location / {
    index foo.bar;
}
Другие вопросы по тегам