2014-10-08 2 views
0

Из чего я понимаю, не $locationProvider.html5Mode(true); удалить хэш из вашего URL? Несмотря на то, что для меня только домашняя страница выглядит нормально, когда вы обновляете страницу. Разве это не должно быть redirectTo:?

var rustyApp = angular.module('rustyApp', ['ngRoute','viewController', 
'mm.foundation','angular-flexslider','ui.router'], 
function($routeProvider, $locationProvider) { 
    $routeProvider.when('/', { 
    templateUrl: '/partials/home.html', 
    controller: 'HomeController' 
}); 
// When you put /home, it also automatically handles /home/ as well 

$routeProvider.when('/work', { 
    templateUrl: '/partials/work.html', 
    controller: 'WorkController' 
}); 
    $routeProvider.when('/contact', { 
    templateUrl: '/partials/contact.html', 
    controller: 'ContactController' 
}); 
    $routeProvider.otherwise({ 
    redirectTo: '/' 
}); 

    $locationProvider.html5Mode(true).hashPrefix('!'); 
}); 

И это мой HTML:

Это в голове:

<base href="/"/> 

Это naviagation ...

<section class="top-bar-section uk-navbar-flip"> 
    <ul class="uk-navbar-nav "> 
     <li my-active-link="/"><a href="/"><i class="uk-icon-home uk-icon-medium "> </i>home</a></li> 
     <li my-active-link="/#work"><a href="/#work"><i class="uk-icon-photo uk-icon-medium "></i> work</a></li> 
     <li my-active-link="/#contact"><a href="/#contact"><i class="uk-icon-envelope-o uk-icon-medium "></i> contact</a> 
    </ul> 
</section> 

UPDATE

Я изменил это в своем файле app.js.

$locationProvider.html5Mode(true).hashPrefix('!'); //changed this 

в

$locationProvider.html5Mode(true); 

И добавил это к .htaccess файл.

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^(.*) /index.html [NC,L] 
</IfModule> 

Однако, похоже, это работало, когда я запускал сервер через apache. Я полагаю, что моя проблема заключалась в том, что статический сервер, для которого этот запрос запрограммирован, не был настроен на создание gulp. Я уверен, что есть некоторые дополнения к gulp-open и т.д ...

ответ

2

Это связано с тем, что веб-сервер сначала обрабатывает запрос, поэтому, если у вас нет перезаписи URL-адресов в любой форме, он просто ищет папку на веб-сервере с именем, которое вы положили в свой «маршрут», ,

Если вы используете веб-сервер Node Express, вы можете установить переписывает так:

app.all('/*', function(req, res) { 
    res.sendfile(__dirname + '/index.html'); // Or whatever your public folder is 
}); 

Для серверов Apache вы можете использовать .htaccess, с чем-то вроде этого:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)  /index.php/#/$1 // Might have to fiddle with the hash and/or other prefix you want to use 
</IfModule> 
+0

Эй, спасибо за ответ на мой вопрос! В настоящее время я использую gulp для запуска общего сервера локально, но, насколько я могу предположить, я должен использовать вышеуказанное (одно для серверов Apache, потому что я использую Express-сервер Express), но изменяю часть 'index.php' на 'index.html' сохранить все в файле' .htaccess' и сохранить его в том же каталоге, что и моя папка разработки? Вы не знаете, насколько это было полезно !!!! ура! –

2

Из docs на $location, он говорит, что вы должны иметь на стороне сервера переписывания в режиме HTML5 для работы с обновления страницы. This page подробно описывает различные конфигурации сервера.

+0

Хм, с точки зрения этого конфигурации сервера выглядят как что-то, что будет помещено в 'httpd.conf'. Вы когда-нибудь настраивали SPA для работы с' $ location' –

+0

Для приложений, которые я создал, я не используется html5mode '$ location'. Частично из-за окружающей среды, в которой я был, и частично потому, что это действительно было не нужно, кроме эстетики. –

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