nginx: отправка всех запросов на одну html-страницу


используя nginx, я хочу сохранить url, но на самом деле загрузить ту же страницу, несмотря ни на что. Я буду использовать url с History.getState() для маршрутизации запросов в моем приложении javascript. Кажется, что это должно быть просто сделать?

location / {
    rewrite (.*) base.html break;
}

работает,но перенаправляет url? Мне все еще нужен url, я просто хочу всегда использовать одну и ту же страницу.

6 122

6 ответов:

Я думаю, что это сделает это для вас:

location / {
    try_files /base.html =404;
}

Через просто try_files не работает для меня - это вызвало переписать или внутренний цикл перенаправления ошибка в моих журналах.

в документах Nginx были некоторые дополнительные сведения:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

Так что я в конечном итоге с помощью следующего:

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}

ваш оригинальный переписать должен почти работать. Я не уверен, почему это будет перенаправление, но я думаю, что вы действительно хотите просто

rewrite ^ /base.html break;

вы должны быть в состоянии поместить это в местоположение или непосредственно на сервере.

это сработало для меня:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

Это позволило мне создать универсальный URL-адрес для одностраничного приложения javascript. Все статические файлы, такие как css, шрифты и javascript, созданные npm run build будут найдены, если они находятся в том же каталоге, что и index.html.

если статические файлы были в другом каталоге, по какой-то причине, вам также нужно что-то вроде:

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}

правильно будет так:

location / {
    rewrite (.*) base.html last;
}

используя last заставит nginx найти новый подходящий location блок в соответствии с результатом перезаписи.

try_files также совершенно правильный подход к этой проблеме.

это сработало для меня:

location / {
    try_files $uri $uri/ /base.html;
}