#nginx #webserver #nginx-config #nginx-location
#nginx #веб-сервер #nginx-config #nginx-location
Вопрос:
Я пытаюсь настроить блок местоположения, содержащий символ «#», для перенаправления на мой серверный сервер, содержащий приложение на основе AngularJS. Стратегия AngularJS HashLocationStrategy вводит правила маршрутизации на основе «#». Поэтому я, по сути, хочу, чтобы любой URL-адрес, начинающийся с «#», перенаправлялся на мой внутренний сервер, но маршрутизация Nginx не может этого сделать.
...
...
location ~ /#/app.*$ {
# backend server routing
}
location / {
# redirects to static website
}
...
...
Но это сопоставление местоположений не работает. Например: http://<hostname>/#/app
должен перенаправлять на внутренний сервер, но в конечном итоге перенаправляет на index.html
статический веб-сайт из-за сопоставления второго блока местоположения /
.
Я также попытался настроить location
блоки с сопоставителями, не содержащими символ «#» (т. Е. location ~ ^.*app.*$ {}
), Но это не сработало. Он по-прежнему перенаправляет на index.html
Есть ли способ настроить Nginx так, чтобы он учитывал первый блок местоположения, прежде чем просматривать второй.
Комментарии:
1. Часть URL-адреса с
#
начала (называемая фрагментом ) никогда не отправляется на сервер. Он используется браузером или клиентским JS-приложением.2. @RichardSmith Большое спасибо за ответ. Это объясняет, почему я не смог получить маршрут Nginx на основе этой части. Я должен был посмотреть журнал доступа к Nginx и понять это. Но я этого не понял и неправильно пытался настроить правило на стороне сервера.
Ответ №1:
Нет, мы не можем настроить сопоставитель местоположений Nginx на основе fragment
(т. Е. Начиная с #
), поскольку он никогда не отправляется на сервер. Благодаря разъяснению от @RichardSmith (см. Раздел Комментариев)
Часть URL-адреса, начиная с # и далее (называемая фрагментом), никогда не отправляется на сервер. Он используется браузером или клиентским JS-приложением — @RichardSmith
Таким образом, шаблон, который я пытался сопоставить в сопоставителе местоположений, никогда не будет работать, поскольку он никогда не достигает сервера.