2016-04-28 89 views
0

我正在Angular 1.5.5中構建一個網站,並希望擁有漂亮的網址(無#)。繼一些其他職位的說明,我說Html5mode是路由器基本URL沿的index.htmlhtml5mode角度給予異常

$locationProvider.html5Mode(true).hashPrefix('!'); 
    <base href="innovationglobal"> 

不過,我得到以下異常:

Error: Failed to execute 'replaceState' on 'History': A history state object with URL ' http://home/ ' cannot be created in a document with origin ' http://localhost:8080 '. at Error (native) at Yf.k.url (lib/1.5.5/angular.min.js:47:311)

+0

這將是有益的,如果你能包括從unminified角度lib中的堆棧跟蹤,但我的猜測是它有事情做與基本href不匹配。你有沒有試過''? – lukiffer

+2

你的'base'標籤是什麼樣的?錯誤是由於交叉原點保護,因爲「home」和「localhost」是不同的域。 – C14L

+1

另外,如果您使用'.html5Mode(true)','.hashPrefix(...)'不是必需的。 – lukiffer

回答

0

更改標籤後絕對URL或路徑

<base href="innovationglobal"> 

通過添加/https://

<base href="/innovationglobal/"> 

現在,當你重新加載頁面時,瀏覽器會向服務器發送一個請求您的當前位置:/innovationglobal/

你需要設置你的服務器來處理這條道路--and其他任何路徑你Angular應用程序可能會放入瀏覽器地址欄中。這可能是/innovationglobal/users//innovationglobal/products/detail/

因爲用戶可能會按F5重新加載到他們正在查看的任何頁面上。這將從您的Angular應用程序中進行控制,並將該URL的請求發送到服務器。

所以你需要設置你的服務器與一個全部。無論地址欄中的路徑如何,您的服務器都應該回復您的Angular應用程序的index.html

但是要小心,您需要爲靜態資產(例如.js和.css文件)制定一個例外。對於nginx,看起來有點像這樣:

location = /static/ { 
    alias /var/www/static/; 
    try_files $uri $uri/ =404; 
} 
location /innovationglobal/ { 
    root /var/www/innovationglobal; 
    try_files $uri /app/index.html =404; 
} 

取決於您使用的Web服務器。

0

您是否嘗試過讓html5Mode不使用底座:

$locationProvider.html5Mode({ 
    enabled: true, 
    requireBase: false 
}); 
相關問題