2013-12-15 2 views
1

Первый раз, используя PushState Backbone и не получая его на 100%, поэтому помощь будет оценена. Мои потребности:Получение Nginx с Backbone pushState и Slim Framework для работы

  1. должен работать с глубоко вложенной URL-адресами и навигация к ним от маршрута по умолчанию и
  2. С прямой связью (или обновлением страницы) глубоко вложенной URL-адресами
  3. должны быть в состоянии назвать мой 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; 
} 

ответ

0

Похоже, что суть проблемы заключается в переписывании URL-адресов маршрута. Основываясь на документации Slim для nginx, ваш файл conf неверен. Смотрите раздел nginx здесь: http://docs.slimframework.com/#Route-URL-Rewriting.

РЕДАКТИРОВАТЬ: Обновлен, чтобы ответить на комментарий ОП ниже.

В вашей конкретной ситуации лучшей рекомендацией, которую я могу сделать, является разделение приложения Backbone.js и приложения Slim на отдельные приложения.

Это отличный пример этого урока sample application. Тонкая часть приложения - несколько лет, но это будет отличная ссылка для создания текущего приложения.

Преимущества разделения приложения многочисленны, возможно, самым большим из них является то, что каждое приложение будет намного ближе к стандартным приложениям Backbone и Slim. Ресурсы, имеющиеся в вашем распоряжении для обучения и решения проблем, будут значительно расширяться, так как сообщения в блогах и документация и вопросы SO будут применяться непосредственно к вашим приложениям. Будущее обслуживание и дальнейшее развитие будут намного проще.

Я уверен, что усилия по расколу приложений будут иметь чрезвычайно высокую отдачу от инвестиций.

+0

Проблема в том, что в моей настройке приложение Slim не подается из index.php, как в примере (http://docs.slimframework.com/#Route-URL-Rewriting). Вместо этого он подается из /php/chs_rest.php. Мне нужно/location, чтобы попытаться загрузить index.html, если это не-PHP-запрос, потому что именно там начинается мое приложение Backbone. Если это PHP-запрос, мне нужно его перенаправить/php /. Я все еще не полностью понимаю правила перезаписи Nginx. – ejvaudio

+0

@ejvaudio: Я обновил свой ответ, чтобы сделать рекомендацию, основанную на вашем комментарии. Спасибо за дополнительную информацию. –

Смежные вопросы