2014-10-08 51 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 spawn的靜態服務器。我確信有一些附加到gulp-open等...

回答

2

這是因爲網絡服務器會首先處理請求,所以如果你沒有以任何形式設置URL重寫,它只會尋找一個文件夾在你的'路由' 。

如果您使用的是節點快速的網絡服務器,你可以設置重寫這樣的:

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 webserver),但將'index.php'部分更改爲'index.html'將所有文件保存在'.htaccess'文件中並保存在我的開發文件夾所在的目錄中?你不知道這是多麼有幫助!乾杯! – 2014-10-09 12:47:36

2

docs$location,它說,你需要有服務器端重寫爲HTML5模式與頁面刷新。 This page詳細介紹了不同的服務器配置。

+0

嗯,從它的外觀看,服務器的配置看起來像是放在'httpd.conf'裏的東西你有沒有配置SPA來處理'$ location' – 2014-10-08 18:30:04

+0

對於我創建的應用,我沒有使用'$ location'的html5mode。部分原因是因爲我所處的環境,部分原因是除了美學之外,它確實沒有必要。 – 2014-10-08 18:38:03