Nginx переписывает правила для Angularjs, чтобы удалить # хэш в URL-адресе в динамических маршрутах

Я сделал следующее:

Приложение AngularJS

В приложении.js:

$locationProvider.html5Mode(true);

В index.html:

<base href="/">

Конфигурация nginx

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

После развертывания все работает нормально (знак # удален) со статическими страницами. Я могу перейти непосредственно к http://fakeurl/about или http://fakeurl/download страницам; если я обновляю браузер, страницы все еще загружаются.

Однако, когда я перехожу непосредственно на динамическую страницу:

http://fakeurl/cars/:car_id

Тогда nginx будет обслуживать 404.

Если я использую путь #, то он перенаправляет на путь без знака # и отображает страницу; но когда я снова обновляю страницу, она показывает 404. (Это происходит только с динамическими маршрутами)

http://fakeurl/#/cars/:car_id

http://fakeurl/#/shops/:shop_id

Какие правила перезаписи мне нужно написать в блоках nginx для обслуживания моих динамических маршрутов? Спасибо!


person RoundOutTooSoon    schedule 22.10.2016    source источник
comment
Вам просто нужно загрузить index.html, что вы и делаете, можете ли вы проверить, к какому файлу он пытается получить доступ, вызывая 404 (ошибка проверки или журнал доступа)?   -  person Satys    schedule 22.10.2016


Ответы (2)


Прошлой ночью я сжег всю свою полуночную нефть и нашел решение здесь. Если у вас есть лучше, пожалуйста, напишите здесь, чтобы я мог узнать

https://gist.github.com/mreigen/4dc8effec8186315c3aac4ce6da46c9a

person RoundOutTooSoon    schedule 22.10.2016
comment
proxy_pass — это ключ - person RoundOutTooSoon; 09.11.2016
comment
Думаю, у меня точно такой же случай ... но я не совсем понял, какие строки указанной страницы github актуальны для нас? - person akcasoy; 04.07.2017

Я думаю, вы можете использовать этот шаблон регулярного выражения ^(.*)\/#и переписать его с помощью $1.

person baqx0r    schedule 27.09.2017