Подтвердить что ты не робот

Клиентское Javascript-приложение - маршрутизация URL без тэга

Я работаю над новым клиентским приложением с последней версией Ember.js. Существует одна страница PHP, которая создает скрипты, css, файлы шаблонов и т.д. И доставляет их все в index.php. Я использую директиву htaccess, чтобы все запросы были переписаны в /index.php. PHP только там, чтобы удобно упаковать Javascript, насколько мне известно.

В настоящее время маршруты в браузере выглядят так и работают нормально.

/#/about 
/#/favorites
/#/etc
/#/posts/5/edit

Однако, я бы хотел, чтобы они выглядели так: они не работают нормально.

/about
/favorites
/etc
/posts/5/edit

Тот же самый клиентский код по-прежнему поставляется со вторым параметром, но он всегда попадает в обработчик маршрута указателя. Я видел, как приложения на стороне клиента снимают это раньше - чего мне не хватает? Нужно ли иметь соответствующие обработчики маршрутов на стороне PHP?

Изменить: Я ищу конкретный ответ о том, как подойти к этому. Сеть полна информации "о, вы просто делаете это", которая оставляет всех почесывающих головок.

4b9b3361

Ответ 1

В Ember.js(версия 1.0.0rc3) это может быть выполнено с помощью Ember.js location API:

App.Router.reopen({
  location: 'history'
});

И затем настройте веб-сервер для перенаправления трафика на приложение Ember.

Чтобы дать конкретный пример, это базовый файл Apache .htaccess, перенаправляющий трафик на приложение Ember, расположенное в index.html:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html#$1 [L]

Как Алекс Уайт указывает, что Apache 2.2.16 и выше поддерживает более простую конфигурацию для перенаправления трафика на одну цель:

FallbackResource /index.html

FallbackResource является частью модуля mod_dir и требует установки AllowOverride Indexes.

Обязательно тщательно протестируйте маршруты приложения. Одной из распространенных ошибок является Uncaught SyntaxError: Unexpected token <, которая вызвана использованием относительных ссылок на файлы CSS и JS. Подготовьте их с меткой /, чтобы сделать их абсолютными.

Эта функциональность не поддерживается в Internet Explorer < 10.

Ответ 2

Лучше, чем RewriteRule, вы можете использовать это для Apache 2.2.16 +:

FallbackResource /index.html

в вашей конфигурации Apache, чтобы RewriteRule не запускался для каждого запроса. Это гарантирует, что каждый маршрут в вашем приложении ember попадает в файл index.html.

Ответ 3

@Pascal: Он не говорит о фактических обновлениях страницы, а использует Ember history (location: 'history').

Чтобы ответить на ваш вопрос, вам нужно настроить свой .htaccess для обслуживания содержимого, как обычно, для JavaScript. После того, как ваши URL-адреса настроены для загрузки вашего приложения, Ember позаботится обо всем, как обычно, с URL-адресом.

Ответ 4

Да, вам нужно будет иметь соответствующие маршруты на стороне сервера. Не использовать хэш-тег также заставит перезагружать страницу, замедляя работу и, вероятно, вызывая больше обновлений, чем нужно.

Кроме того, вам нужно будет передать состояние через сервер или использовать какой-либо вариант локального хранилища браузера.