Angular學習第八天:angular路由去掉的URL里的#號

url 中存在#號

第六講的時候我說過了,angular是通過瀏覽器地址欄的url(http://www.xxx.com/#/index) 號后面的部分#/index來確定當前用戶訪問的是哪個頁面,然后根據(jù)這個URL對視圖(ng-view)完成更新尿贫;并支持HTML5的歷史記錄功能拍柒。

  • angular的地址欄是什么樣子钞螟?
http://www.xxx.com/
http://www.xxx.com/#/login
http://www.xxx.com/#/index
http://www.xxx.com/#/regsiter
  • 這跟我們平常見到的鏈接不一樣(如http://www.xxx.com/admin/login)勤众, 這樣就區(qū)分了這個路由是由angular管理的還是由webserver管理的论寨。

總有強迫癥患者想要去掉這個 # 號赖临,那么angular可以去掉這個#號嗎胞锰? 當然可以!>ふァP衢拧!

  • angular 提供了一個 HTML5模式吵聪,啟動這個路由模式就可以去掉路由中的 # 號 (即在配置路由時凌那,注入 $locationProvider 服務,路由配置中加入如下代碼 $locationProvider.html5Mode(true);)
var appH5 = angular.module('appH5', ['ngRoute']);
// 配置路由
appH5.config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) {
  $routeProvider.otherwise({redirectTo: '/index'});
  $routeProvider
      .when('/index', {
          templateUrl: "views/index.html",
          controller:'indexCtrl'
      })
      .when('/regsiter', {
          templateUrl: "views/regsiter.html",
          controller:'regsiterCtrl'
      })
      .when('/message/:msgid', {
          templateUrl: "views/message.html",
          controller:'messageCtrl'
      });
      $locationProvider.html5Mode(true);//啟用html5模式
}])
  • 做完以上的操作吟逝,我們就可以優(yōu)雅的訪問URL了???

http://www.xxx.com/#/login => http://www.xxx.com/login

嘗試了之后發(fā)現(xiàn)帽蝶,當我們直接打開 http://www.xxx.com/ 路由中配置默認重置到 /index $routeProvider.otherwise({redirectTo: '/index'});;沒有問題澎办,我們在頁面中點擊鏈接和通過$location.path()跳轉(zhuǎn)也沒有問題嘲碱,但是當我們直接在地址欄輸入 http://www.xxx.com/index; 然后你會看見下邊的情況

2180072-c2642ff94ca33e9f.png

問題原因

剛剛說過,http://www.xxx.com/#/regsiterhttp://www.xxx.com/admin/login這兩個url用 # 區(qū)分了是angular還是webserver管理的url局蚀,當我們直接訪問 http://www.xxx.com/login 沒有#號 麦锯,這個時候 webserver就嘗試去解析,發(fā)現(xiàn)找不到對應的url琅绅,這個時候自然就拋出 404扶欣。

  • 找到問題,既然問題出在webserver解析不了千扶,那我們何不把webserver解析不了的url都轉(zhuǎn)發(fā)到angular應用里面料祠?這不就皆大歡喜了

  • 解決辦法 本人開發(fā)用的服務器是 nginx+js+html+css 前后端分離的方式
    1、修改SPA主入口 index.html(加入<base href="/">)

<!doctype html>
<html  ng-app="appH5">
<head>
<base href="/">
</head>
<body >
</body>
</html>

2澎羞、開啟html5模式

var appH5 = angular.module('appH5', ['ngRoute']);
// 配置路由
appH5.config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) {
  $routeProvider.otherwise({redirectTo: '/index'});
  $routeProvider
      .when('/index', {
          templateUrl: "views/index.html",
          controller:'indexCtrl'
      })
      .when('/regsiter', {
          templateUrl: "views/regsiter.html",
          controller:'regsiterCtrl'
      })
      .when('/message/:msgid', {
          templateUrl: "views/message.html",
          controller:'messageCtrl'
      });
      $locationProvider.html5Mode(true);//啟用html5模式
}])
  1. 配置nginx服務器(nginx-1.11.0/conf/nginx.conf)
server {
      listen       8088;
      server_name  localhost;

      #charset koi8-r;

      #access_log  logs/host.access.log  main;

      location / {
          root   C:\Git\app\router_demo;
          try_files $uri $uri/ /index.html =404;
      }
}

其他服務器(本人不用這些服務器髓绽,未經(jīng)過驗證,只做參考)

Apache的設置【.htaccess的寫法】

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ – [L]

# If the requested pattern is file and file doesn’t exist, send 404
RewriteCond %{REQUEST_URI} ^(/[a-z_-s0-9.]+)+.[a-zA-Z]{2,4}$
RewriteRule ^ – [L,R=404]

# otherwise use history router
RewriteRule ^ /index.html

OK 問題解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妆绞,一起剝皮案震驚了整個濱河市顺呕,隨后出現(xiàn)的幾起案子枫攀,更是在濱河造成了極大的恐慌,老刑警劉巖株茶,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件来涨,死亡現(xiàn)場離奇詭異,居然都是意外死亡启盛,警方通過查閱死者的電腦和手機蹦掐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僵闯,“玉大人卧抗,你說我怎么就攤上這事」鞒В” “怎么了颗味?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牺弹。 經(jīng)常有香客問我浦马,道長,這世上最難降的妖魔是什么张漂? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任晶默,我火速辦了婚禮,結(jié)果婚禮上航攒,老公的妹妹穿的比我還像新娘磺陡。我一直安慰自己,他們只是感情好漠畜,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布币他。 她就那樣靜靜地躺著,像睡著了一般憔狞。 火紅的嫁衣襯著肌膚如雪蝴悉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天瘾敢,我揣著相機與錄音拍冠,去河邊找鬼。 笑死簇抵,一個胖子當著我的面吹牛庆杜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碟摆,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晃财,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了典蜕?” 一聲冷哼從身側(cè)響起拓劝,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤雏逾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后郑临,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡屑宠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年厢洞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片典奉。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡躺翻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卫玖,到底是詐尸還是另有隱情公你,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布假瞬,位于F島的核電站陕靠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脱茉。R本人自食惡果不足惜剪芥,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琴许。 院中可真熱鬧税肪,春花似錦、人聲如沸榜田。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箭券。三九已至净捅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邦鲫,已是汗流浹背灸叼。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庆捺,地道東北人古今。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像滔以,于是被迫代替她去往敵國和親捉腥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容