как я ожидаю?
set $root F:/web/app/public;
root $root;
location = / {
root $root/pages;
index index.html;
}
На линуксе у меня все работает, а на винде сайт не отображается, и пишет в логах вот что:
2022/05/07 19:33:54 [error] 14256#15568: *10 CreateFile() "F:/web/app/public/index.html" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
pages пропадает.
Не переопределяется root внутри локейшена почему-то.
Виндовые пути в конфиге надо брать в кавычки.
Потому что неявная директива try_files $uri $uri/ =404 (поведение фазы PRECONTENT по умолчанию) совместно с директивой index index.html генерирует внутренний редирект c / на /index.html И новый URI /index.html не попадает в location = / { ... }, а следовательно использует root по умолчанию. Зато вот это location = /index.html { root $root/pages; } сделает то, что ты хочешь.
Мне так и на линуксе делать надо? Там у меня все работает и так как у меня написано
Ты уверен, что у тебя там location = /, а не location /?
Да уверен. Я скопировал конфиг вообще, и потом лишнее удалил.
Вот так вот сделал на винде, и все заработало. Но черт возьми, на что я убил 40 минут. Почему это работает не также как на Линуксе... location = / { root $root/pages; index index.html index.htm; } location = /index.html { root $root/pages; }
Я не понял, но у меня же сайт работает как надо) Я сейчас хочу посмотреть, что у меня будет сервер возвращать. Это нужно в aсcess.log смотреть?
Нет Этого в логах по умолчанию нет Но ты можешь определить свой logformat и добавить в него $request_filename
Друг. Спасибо тебе за потраченное время. Я только что увидел как я слеп и невнимателен. И действительно мои сайты работают благодарю чуду. В одном сайте у меня внизу написано: location / { root $root/pages; try_files $uri $uri/ /$uri.html; } Наверно это позволяет ему работать правильно. А на других сайтах, у меня index.html лежит в public, а не в pages. Получается чудеса бывают)
Обсуждают сегодня