Nginx Синатра глава мета-обновление 404 - PullRequest
0 голосов
/ 29 августа 2018

По какой-то причине страница пересылается на nginx зарезервированную страницу 404. Сайт работает, кроме этой одной страницы. На моей целевой странице в шапке есть следующее:

<meta http-equiv="refresh" content="5;URL=/second">

Даже жесткое кодирование http://mydomain.local/second обслуживает те же 404.

Это Sinatra развертывание.

get "/second" do
  @title = "my Title"
  erb :index
end

Я думаю, что, возможно, моя директива locations в nginx.conf немного странная:

location / {
    autoindex                       off;
    try_files                       $uri $uri/ $uri/$request =404;
    index                           /;
    }

У кого-нибудь есть понимание, почему Sinatra не записывает маршрут и просто подает файл? Приветствия.

1 Ответ

0 голосов
/ 29 августа 2018

Давайте разберем это:

autoindex off;

Вам не нужно указывать это, по умолчанию оно отключено.

try_files $uri $uri/ $uri/$request =404;

Попробуйте сопоставить запросы к файлам в этом порядке, подайте первый, соответствующий. Если ничего не найдено, верните 404. Ваш запрос http://mydomain.local/second, поэтому вы указываете Nginx искать:

  1. Webroot / секунду
  2. Webroot / второй /
  3. webroot / second / GET / second HTTP / 1.1
  4. Возврат 404

Директива index сообщает Nginx, как обрабатывать запросы, заканчивающиеся косой чертой, обычно вы указываете файлы, которые могут быть индексными файлами в вашем проекте, например, index.php, index.html и т. Д. Вы на самом деле не используете это и try_files вместе, поскольку они служат сходной цели.

Также стоит отметить, что Nginx добавляет косую черту к любому запросу, который не имеет такового и не заканчивается расширением файла, поэтому может также случиться так, что get "/second" do необходимо изменить на get "/second/" do, поскольку я сомневаюсь, что Синатра когда-либо увидит запрос без добавленной косой черты

...