nginx: отправлять все запросы на одну html-страницу - PullRequest
137 голосов
/ 11 августа 2011

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

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

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

Ответы [ 6 ]

175 голосов
/ 11 августа 2011

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

location / {
    try_files /base.html =404;
}
22 голосов
/ 16 февраля 2015

Использование только 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;
}
15 голосов
/ 12 августа 2011

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

rewrite ^ /base.html break;

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

11 голосов
/ 02 августа 2017

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

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/;
}
7 голосов
/ 09 марта 2015

Правильный путь будет следующим:

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

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

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

4 голосов
/ 03 июня 2018

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

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