Первый раз, используя PushState Backbone и не получая его на 100%, поэтому помощь будет оценена. Мои потребности:Получение Nginx с Backbone pushState и Slim Framework для работы
- должен работать с глубоко вложенной URL-адресами и навигация к ним от маршрута по умолчанию и
- С прямой связью (или обновлением страницы) глубоко вложенной URL-адресами
- должны быть в состоянии назвать мой PHP-интерфейс API (с использованием Slim Framework) правильно с синхронизацией Backbone.
Мне не удалось заставить все 3 из этих вещей работать, хотя с перезаписью Nginx я мог бы достичь # 1 и # 2.
Для достижения # 1 я сделал стандартный
location/{
root html;
index index.html index.htm index.php;
try_files $uri $uri/ /index.html;
}
перенаправлении index.html, который документально хорошо.
Однако это не работает с № 2. Если я перейду непосредственно к вложенному URL-адресу, например, www.example.com/store/item123/subitem345, я получаю ошибки, которые не могут загрузить мои файлы require.js, которые искали в www.example.com/store/item123/ , Естественно, это неправильно.
Я мог бы сделать # 2 работу с некоторыми правилами перезаписи, которые удаляют нежелательную часть URL-адреса (часть/store/item123). Это верно? И если да, существует ли универсальная переработка, чтобы сделать эту работу?
Я никогда не смог бы получить № 3 для работы полностью. Всякий раз, когда я находился во вложенном маршруте (например, store/someitem123/subitem345), Backbone добавлял бы промежуточные части URL-адреса для вызова API-интерфейса, что дало бы 404 естественным образом. Поэтому вместо необходимого (/ php/api/args /) я бы получил (store/someitem123/php/api/args).
Должен быть способ переопределить функцию синхронизации базовой линии или использовать переписку Nginx для удаления промежуточных частей, которые не нужны (часть store/someitem123 в моем примере). Для справки я должен иметь этот блок в конфигурации Nginx, чтобы вообще работать с обратными вызовами. Но в настоящее время они будут работать только на маршрутах, у которых нет глубоко вложенных URL-адресов.
location /php/ {
try_files $uri $uri/ /php/chs_rest.php?$args;
}
Проблема в том, что в моей настройке приложение Slim не подается из index.php, как в примере (http://docs.slimframework.com/#Route-URL-Rewriting). Вместо этого он подается из /php/chs_rest.php. Мне нужно/location, чтобы попытаться загрузить index.html, если это не-PHP-запрос, потому что именно там начинается мое приложение Backbone. Если это PHP-запрос, мне нужно его перенаправить/php /. Я все еще не полностью понимаю правила перезаписи Nginx. – ejvaudio
@ejvaudio: Я обновил свой ответ, чтобы сделать рекомендацию, основанную на вашем комментарии. Спасибо за дополнительную информацию. –