Nginx: запретить index.html в URL
Мы создаем сайт, состоящий только из статических файлов (используя Assemble).
Наличие расширения.html для URL выглядит так, как девяностые годы, поэтому мы генерируем каждый статический HTML-файл в своем собственном каталоге и называем его index.html. Например, URL http://www.example.com/foo/bar/ находится в файле /var/www/foo/bar/index.html
,
Это хорошо работает, но меня беспокоит одна маленькая вещь: теперь есть два возможных URL-адреса одного и того же ресурса:
- http://www.example.com/foo/bar/ (косая черта)
- 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;
}