При поступлении на сайт, управляемый AngularJS, перенаправляется на / вместо фактической ссылки

У меня есть сайт, созданный с помощью AngularJS. Я использую $routeProvider для определения множества маршрутов. Все они работают нормально, когда я уже на сайте. Возьмем следующее: rooturl.com#/services/myservicename

Когда веб-сайт уже открыт, скажем, на домашней странице «#/», тогда все работает нормально, он перенаправляется на rooturl.com#/services/myservicename и загружает правильный контент.

Теперь, скажем, я открываю новый браузер, вставляю rooturl.com#/services/myservicename в адресную строку, я попадаю на свой веб-сайт, но меня перенаправляют на контент для «/» вместо rooturl.com#/services/myservicename.

Это в основном то же самое, что и здесь: di">Маршруты AngularJS с параметрами в пути не загружаются в режиме HTML5 при переходе непосредственно к URL-адресам ... за исключением того, что у меня нет этой строки, поэтому я не уверен, относится ли обсуждение документации $locationProvider ко мне?

$locationProvider.html5Mode(true);

Более того, я нахожусь в корпоративной интрасети. Я НЕ смогу получить доступ к серверу. Есть ли что-то на стороне клиента, которое я могу сделать в коде моего углового сайта, чтобы пользователь мог вводить rooturl.com#/services/myservicename в адресной строке и всегда достигать этого маршрута?

Обратите внимание, какой код важнее для ответа, но вот мой .config в определении приложения. Остальной код, который следует за ним, — это контроллеры и сервисы.

app.config(function($routeProvider){

$routeProvider
    .when('/',
        {
            templateUrl: 'app/partials/home_tpl.html',
            controller: 'HomeCtrl'
        })
    .when('/support/:subject',
        {
            templateUrl: 'app/partials/support-process.html',
            controller: 'SupportProcessCtrl'
        })
    .when('/support/:subject/:topic',
        {
            templateUrl: 'app/partials/support-process.html',
            controller: 'SupportProcessCtrl'
        })
    .when('/projects',
        {
            templateUrl: 'app/partials/project_list_tpl.html',
            controller: 'ProjectsCtrl'
        })
    .when ('/site-help',
        {
            templateUrl: 'app/partials/site-help.html'
        })
    .otherwise(
        {
        templateUrl: 'app/partials/404.html'
        })
});

person Max    schedule 20.03.2014    source источник


Ответы (1)


Режим html5, являющийся истинным, позволяет вам опустить # из вашего маршрута.

Похоже, вы можете пропустить косую черту в своем URL-адресе.

rooturl.com#/services/myservicename

наверное должно быть

rooturl.com/#/services/myservicename

person Jordan Papaleo    schedule 20.03.2014
comment
К сожалению, похоже, это ничего не изменило. Если вместо этого я перейду на rooturl.com/#/services/myservicename, я все равно попаду на свою домашнюю страницу (начальный маршрут, также известный как /). Есть ли что-то, что мне нужно настроить в моей конфигурации? - person Max; 21.03.2014
comment
Также позвольте мне уточнить, я тестирую это в IE8, который я должен поддерживать, если это имеет значение. - person Max; 21.03.2014
comment
Измените свое иначе, чтобы фактически перенаправить на маршрут. Несколько вещей, которые нужно проверить: - Измените маршрут на именованный; я думаю, что это хорошая практика .otherwise({redirectTo: '/'}); - Также я вообще не вижу определенного маршрута для вашего URL в вашей конфигурации. Как вы используете этот URL в своем приложении? - person Jordan Papaleo; 21.03.2014
comment
действительно ли мои настройки для .otherwise влияют на связывание? И что вы имеете в виду под "определенный маршрут"? Можете ли вы дать мне фрагмент того, что вы имеете в виду? Когда я нахожусь в приложении, все ссылки выполняются точно так, как ожидалось, загружая партиалы, запуская контроллеры. - person Max; 21.03.2014
comment
Думаю, мне неясно, должен ли в обычной простой реализации angular, без экспресса или чего-либо еще делать какую-либо дополнительную обработку глубоких ссылок с сервера, должен ли rooturl.com/#/services/myservicename выполнять желаемый частичный контроллер, который я определил в $routeProvider, если я ввожу полную ссылку rooturl.com/#/services/myservicename в адресной строке или если мне нужно добавить настройки выше, чтобы разрешить это. Я не смог определить что-то еще, что мне нужно было сделать, так как здесь у меня мало зависимостей, я просто использую $routeProvider. - person Max; 22.03.2014
comment
Привет, Макс. Извини, что меня не было некоторое время. Можете ли вы где-нибудь получить образец рабочего кода, чтобы я мог взглянуть? Я чувствую, что мы могли бы комментировать взад и вперед некоторое время, и я действительно хотел бы решить эту проблему для вас. - person Jordan Papaleo; 27.03.2014
comment
Итак, ваш маршрут /services/myservicename правильный. Я не вижу .when(/services/myservicename, {}) Возможно, вы просто используете для этого имена-заполнители. Какой маршрут вы пытаетесь получить доступ? - person Jordan Papaleo; 27.03.2014
comment
Да, я должен сказать, например, /support/services/myservicename, .when('/support/:subject/:topic', - person Max; 25.04.2014