AngularJS学习第八天:angular路由去掉的URL里的#号

url 中存在#号

第六讲的时候我说过了,angular是通过浏览器地址栏的url(http://www.xxx.com/#/index)号后面的部分#/index来确定当前用户访问的是哪个页面,然后根据这个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),这样就区分了这个路由是由angular管理的还是由webserver管理的。

总有强迫症患者想要去掉这个 # 号,那么angular可以去掉这个#号吗? 当然可以!!!!

  • 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模式
}])
  • 做完以上的操作,我们就可以优雅的访问URL了???
http://www.xxx.com/#/login => http://www.xxx.com/login

尝试了之后发现,当我们直接打开 http://www.xxx.com/ 路由中配置默认重置到 /index$routeProvider.otherwise({redirectTo: '/index'});;没有问题,我们在页面中点击链接和通过$location.path()跳转也没有问题,但是当我们直接在地址栏输入 http://www.xxx.com/index;然后你会看见下边的情况

没错出现404了

问题原因

刚刚说过,http://www.xxx.com/#/regsiterhttp://www.xxx.com/admin/login这两个url用 # 区分了是angular还是webserver管理的url,当我们直接访问 http://www.xxx.com/login 没有#号 ,这个时候 webserver就尝试去解析,发现找不到对应的url,这个时候自然就抛出 404。

  • 找到问题,既然问题出在webserver解析不了,那我们何不把webserver解析不了的url都转发到angular应用里面?这不就皆大欢喜了

  • 解决办法 本人开发用的服务器是 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模式
}])

3、配置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;
        }
}

其他服务器(本人不用这些服务器,未经过验证,只做参考)

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 问题解决

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容