angular框架上线后url怎么办?

首先,URL #问题

使用AngularJS的朋友应该知道,AngularJS框架定义了自己的前端路由控制器,通过不同的URL实现了ng-app对ng-view的部署和刷新,支持HTML5的历史功能。详情请参考文章AngularJS路由和模板。

默认情况下,HTML5模式是不启用的,URL会包含一个#号来区分AngularJS管理的路径和WebServer管理的路径。

比如下面带#的URL就是AngularJS管理的路径。

这种体验其实不太友好,尤其是对于我这种喜欢简约设计的人。#的出现不是我自己的意愿,所以有多难受。AngularJS框架提供了HTML5模式下的路由,可以直接去掉#号。

只需设置$ location provider . html 5 mode(true)。

book.config(['$routeProvider ',' $locationProvider ',function ($routeProvider,$locationProvider) {

//..省略代码

$ location provider . html 5 mode(true);

}]);

支持HTML5的路由URL。

就是这个问题困扰我很久了,所以我要用带#的URL。

第二,找到错误的原因

那么,这个问题的原因在哪里呢?路径解析有错误。

让我从头说起。AngularJS是一个单页面应用,一个ng-app对应一个页面和一个URL。AngularJS实现了自己的前端路由,这样一个ng-app可以管理多个URL,然后对应多个ng-vew。当我们访问URL(/book)时,如何确定这个路径是后台的WebServer管理的还是前台的AngularJS管理的?

从两个方面来看:

1.如果用户先访问主页(),然后跳转到页面(/book),跳转的是AngularJS管理的URL,访问正常。

2.当用户直接访问一个页面(/book)时,请求首先提交到WebServer后台,后台没有对应页面(/book)的路由管理,所以会出现404错误。

如果能理解这一层,技术上解决起来会非常容易。我们可以通过要求WebServer将AngularJS管理的所有路由URL转发给ng-app来解决404的问题。同时没有#号,还支持HTML5的历史查询!!

实施可分为两种解决方案:

1.静态网站:纯前台网站(JS+HTML+CSS),通过Nginx提供web服务。

2.动态网站:前台(JS+HTML+CSS)+后台Node.js提供web服务。

三、静态网站的解决方案

我们需要修改的静态网站包括三个文件。

index . html:NG-APP的定义文件。

app . js:ng-app对应的控制文件。

Nginx.conf: nginx的网站配置文件。

编辑index.html并添加基本标签。

& lthtml lang = " zh-CN " ng-app = " book " & gt;

& lthead & gt

& ltbase href = "/" rel = " external no follow " >

//省略代码

& lt/head & gt;

编辑app.js,添加$ location provider . html 5 mode(true);

book.config(['$routeProvider ',' $locationProvider ',' $sceProvider ',' tplProvider ',function ($routeProvider,$locationProvider,$sceProvider,tplProvider) {

$routeProvider

。when('/',{ template URL:TPL provider . html(' welcome '),controller: 'WelcomeCtrl'})

。当('/book ',{模板URL:tplprovider.html(' book '),控制器:' bookctrl'})//book。

。当('/book-r1 '),{模板URL:tplprovider.html(' book-r 1 '),控制器:' bookr1ctrl'})/r的极客理想。

。when ('/video '),{模板URL:tplprovider.html(' video '),控制器:' videoctrl'})//video。

。when ('/about ',{ template URL:tplprovider.html(' About '),controller:' About ctrl ' })//关于作者。

。否则({ redirecto:'/' });

$ location provider . html 5 mode(true);

}]);

编辑nginx的配置文件,并添加try_files配置。

服务器{

set$htdocs/www/deploy/my site/on book;

听80;

server _ name onbook.me

位置/ {

root $ htdocs

try _ files $ uri $ uri//index . html = 404;

}

}

这样静态网站就做好了,没有麻烦的号,可以直接访问刷新任意页面。

第四,动态网站的解决方案

我们还需要修改的动态网站包括三个文件。

index . html:NG-APP的定义文件。

app . js:ng-app对应的控制文件。

server . js:express框架的路由访问控制文件。

修改Index.html和app.js,和静态网站的解决方案一样。一般来说,动态网站不会直接通过Nginx进行路由,而是通过Web服务器进行管理。假设我们使用Node.js的Express的Web框架

打开Express framework的路由访问控制文件server.js,增加路由配置。

app.use(function (req,res) {

console . log(req . path);

if(req . path . index of('/API ')& gt;=0){

res.send("服务器文本");

}else{ //angular启动页面

RES . sendfile(' app/index . html ');

}

});

设置当站内路径(req.path)不包含/api时,将转发给AngularJS的ng-app(index.html)。所以我们直接访问地址(/book)时,/book不包含/api,会直接转发给AngularJS进行路由管理。我们实现了路由的优化!