Angular.JS去掉访问路径URL中的#号

314 阅读2分钟

带#号的url

http://localhost:8082/

http://localhost:8082/#/

http://localhost:8082/#/dashboard

http://localhost:8082/#/home

不带#号的url

http://localhost:8082/

http://localhost:8082/dashboard

http://localhost:8082/home

带#的原因

  1. 使用angularjs的朋友都应该了解,angularjs框架定义了自己的前端路由控制器,通过不同url实现单面(ng-app)对视图(ng-view)的部署刷新,并支持html5的历史记录功能
  2. 对于默认的情况,是不启动html5模式的,url中会包括一个#号,用来区别是angularjs管理的路径还是webserver管理的路径。

解决办法

AngularJS框架提供了一种HTML5模式的路由,可以直接去掉#号,通过设置$locationProvider.html5Mode(true)就行了。

  1. 在angular.module.config文件中注入“$locationProvider”
angular.module("app",["ui.router"])
    .config(function($locationProvider){
        $locationProvider.html5Mode(true);
    })
  1. 在index.html的head内加入base标签设置href
<head>
    <base href="/"><base>
</head>

存在问题:其实前两步的设置已经可以实现去掉“#”跳转了,但是每次刷新或者直接输链接进到页面都会报找不到页面的错

image.png

这是由于WebServer的没有各个子页面的路由,所以报找不到的错误,让WebServer把属于AngularJS管理的路由URL,都发转到ng-app就可以解决404的问题了

设置WebServer配置

 一般情况下,现在很多前端的编译器都自带webserver,很多前端小伙伴都没有自己搭过webserver,所以多说一点修改webserver的配置问题。

nginx下载安装

  • 在nginx官方网站下载,下载好只好解压到任意位置,比如桌面的nginx文件夹中,直接cmd

cd C:\Users\admin\Desktop\nginx

进入解压的文件夹下

start nginx

打开浏览器输入localhost直接到nginx欢迎界面,说明webserver已经启动 b.接下来就是把自己的项目添加到服务器下

其实很简单,把自己项目放到nginx文件加下的html里,index.html覆盖原来的index.html就好。

  • 修改 nginx 配置为 webserver 路径配置

打开nginx.conf,在http{}下第一个server的location / {} 下的index替换掉,替换为

location / { root html; try_files uriuri uri/ /index.html =404; } 然后重新加载服务

nginx -s reload

浏览器刷新不会再出现找不到页面的问题了。