2014-11-13 2 views
6

Я использую ui-router, и имеют profile состояние, которое выглядит следующим образом:UI-маршрутизатор возвращает: «Не удается получить/страницу»

.state('profile', { 
    url: "/profile", 
    templateUrl: "views/profile.html", 
    controller: 'ProfileCtrl', 
    resolve: { 
     currentUser: function(gamAuth){ 
     return gamAuth.checkCurrentUser(config.userRol.user) 
     } 
    } 

При попытке перезагрузить/обновить страницу, я получаю следующее сообщение :

Cannot GET /profile 

проблема не возникает, когда я перезагрузить мой «целевую страницу» по адресу: http://localhost:9000/, который имеет следующее состояние в $stateProvider:

.state('home', { 
    url: "/", 
    [...] 
}) 

Я использую: $locationProvider.html5Mode(true);

Я попытался обеспечение абсолютного URL, как это предлагается в решении Tree here

Я также попытался ряд предложений найти в Интернете, наиболее популярным является то, что вдоль этих линий (размещение его в разделе app.run()):

$state.transitionTo($state.current, $stateParams, { 
    reload: true, 
    inherit: false, 
    notify: true 
}); 

Все подходы были испытаны и без <base href="/"> тега присутствует в <head> моего index.html. Спасибо за ваше время.

ответ

2

вам необходимо включить html5mode в true, если вы хотите использовать свой URL без префикса '#'.

Кроме того, необходимо добавить modRewrtie как упоминалось here

Предпосылка:

npm install --save-dev connect-modrewrite 
+0

Я использую: '$ locationProvider.html5Mode (истина)' в данный момент. Должно ли это быть сделано как-то иначе? –

+1

О! Если вы уже используете это, чем его проблема с вашим сервером, откуда вы обслуживаете сайт. сообщите мне, как вы обслуживаете свой проект. – CrazyGeek

+1

Я только что попробовал сейчас, и несмотря на то, что у меня есть (что-то похожее) 'html5Mode (true)' - я набрал 'http: // localhost: 9000/#/profile', и страница правильно разрешает'/profile'. Означает ли это, что 'html5' должен быть каким-то образом/где-то иначе, вместо использования' $ locationProvider'? –

1

Когда вы включили html5Mode, символ # не будет больше использоваться в ваших URL-адресов. Символ # полезен, так как он не требует конфигурации на стороне сервера. Без # URL выглядит намного приятнее, но также требует перезаписывания на стороне сервера.

для получения более подробной информации о переписывает быть установка:

https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. –

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