AngularJS: как включить $ locationProvider.html5Mode с глубокими ссылками

При включении html5Mode в AngularJS через$locationProvider.html5Mode(true)навигация кажется перекошенной, когда вы попадаете на страницу, расположенную глубже на сайте.

например:

http://www.site.com

когда я перехожу к корню, я могу нажать на все ссылки на сайте, Angular's$routeProvider возьмет на себя навигацию по сайту и загрузку правильных просмотров.

http://www.site.com/news/archive

но когда я перехожу к этому URL (или нажимаю кнопку Обновить, когда ям на Deeplink, как вышеупомянутый ...) эта навигация не работает, как я ожидаю. во-первых, наш какДокументация для $ locationProvider.html5Mode указывает, мы ловим все URL-адреса на сервере, аналогичноotherwise route in angular и возвращает тот же html, что и корневой домен. Но если я тогда проверю$location объект изнутриrun функция угловая, это говорит мне, чтоhttp://www.site.com мойhost и это/archive мойpath,$routeProvider прибывает в.otherwise() пункт, так как у меня есть только/news/archive как действительный маршрут. и приложение делает странные вещи.

Может быть, переписать на сервере нужно по-другому, или мне нужно указать вещи в угловых, но в настоящее время ям, не понимая, почему угловые видятпуть без/news сегмент включен.

пример main.js:

// Create an application module
var App = angular.module('App', []);

App.config(['$routeProvider', '$locationProvider', function AppConfig($routeProvider, $locationProvider) {

    $routeProvider
        .when(
        '/', {
            redirectTo: '/home'
        })
        .when('/home', {
            templateUrl: 'templates/home.html'
        })
        .when('/login', {
            templateUrl: 'templates/login.html'
        })
        .when('/news', {
            templateUrl: 'templates/news.html'
        })
        .when('/news/archive', {
            templateUrl: 'templates/newsarchive.html'
        })
        // removed other routes ... *snip
        .otherwise({
            redirectTo: '/home'
        }
    );

    // enable html5Mode for pushstate ('#'-less URLs)
    $locationProvider.html5Mode(true);
    $locationProvider.hashPrefix('!');

}]);

// Initialize the application
App.run(['$location', function AppRun($location) {
    debugger; // -->> here i debug the $location object to see what angular see's as URL
}]);

редактировать в соответствии с запросом, более подробная информация о стороне сервера: сторона сервера организована путем маршрутизации Zend Framework, и он обрабатывает это 's собственные маршруты (для передачи данных в интерфейс по конкретным/api urls, и, в конце концов, существует универсальный маршрут, если никакой другой конкретный маршрут не связан, он обслуживает тот же html, что и корневой маршрут. так что он в основном обслуживает домашнюю страницу html по этому глубокому маршруту.

Обновление 2 Изучив проблему, мы заметили, что эта маршрутизация работает нормально на стабильной версии Angular 1.0.7, но демонстрирует описанное выше поведение в нестабильной версии Angular 1.1.5.I '

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

Ответы на вопрос(5)

Ваш ответ на вопрос