angular去掉地址栏#号

本文介绍了如何在AngularJS中启用HTML5模式以移除URL中的#号,包括在AngularJS应用中设置$locationProvider.html5Mode(true),添加base标签,以及针对不同WebServer(如Tomcat、Nginx、Apache、IIS和Express)的URL转发配置方法。通过UrlRewriteFilter插件或try_files指令实现URL重写,确保页面跳转不会导致404错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.添加base标签

<html lang="zh-CN" ng-app="app"> <head> <base href="/"> //增加base标签 // 省略代码 </head>

2.编辑app.js,增加 $locationProvider.html5Mode(true);

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { $stateProvider ...//省略代码 $locationProvider.html5Mode(true); }]);

3.讲html页面中跳转部分的 ' #/ ' 去掉

例如:<a href="#/detail"></a>  修改为<a href="detal"></a> 

4.WebServer地址转发

 
WebServer地址转发配置根据个人项目选择配置,本人用到的是tomcat,其他没有测试。
传送门:http://www.cnblogs.com/softidea/archive/2016/07/07/5651421.html

tomcat

这里需要使用到UrlRewriteFilter这个插件,使用方法: 1.将urlrewritefilter-4.0.3.jar包放入应用目录“WEB-INF/lib”下。 2.在WEB-INF/web.xml配置文件中加入:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> 

3.在WEB-INF目录新建“urlrewrite.xml”转发规则文件。内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
   <rule> <from>^/[a-zA-Z]+(/([a-zA-Z]|[0-9])*)*$</from> <to>/index.html</to> </rule> </urlrewrite> 

其中rule部分匹配地址用到了正则表达式,这里不赘述。这样就将规则设置完成了,重启tomcat刷新页面,没有#也不会404了。

Nginx

Nginx用到的是try_files,修改nginx的配置文件,增加try_files配置。

server {
    server_name localhost;
    root /www;
    location / {
        try_files $uri $uri/ /index.html; } } 

其中root的目录,对应ng-app的定义文件html的目录

Apache
<VirtualHost *:80>
    ServerName localhost

    DocumentRoot /www

    <Directory /www>
        RewriteEngine on # Don't rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L] </Directory> </VirtualHost> 
IIS
<system.webServer>
  <rewrite>
    <rules> <rule name="Main Rule" stopProcessing="true"> <match url=".*" ></match> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" ></add> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" ></add> </conditions> <action type="Rewrite" url="/" ></action> </rule> </rules> </rewrite> </system.webServer> 
Express
var express = require('express');
var app = express();
app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: __dirname }); }); app.listen(8080); //the port you want to use 
 

3.WebServer地址转发

tomcat

这里需要使用到UrlRewriteFilter这个插件,使用方法: 1.将urlrewritefilter-4.0.3.jar包放入应用目录“WEB-INF/lib”下。 2.在WEB-INF/web.xml配置文件中加入:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> 

3.在WEB-INF目录新建“urlrewrite.xml”转发规则文件。内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
   <rule> <from>^/[a-zA-Z]+(/([a-zA-Z]|[0-9])*)*$</from> <to>/index.html</to> </rule> </urlrewrite> 

其中rule部分匹配地址用到了正则表达式,这里不赘述。这样就将规则设置完成了,重启tomcat刷新页面,没有#也不会404了。

Nginx

Nginx用到的是try_files,修改nginx的配置文件,增加try_files配置。

server {
    server_name localhost;
    root /www;
    location / {
        try_files $uri $uri/ /index.html; } } 

其中root的目录,对应ng-app的定义文件html的目录

Apache
<VirtualHost *:80>
    ServerName localhost

    DocumentRoot /www

    <Directory /www>
        RewriteEngine on # Don't rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L] </Directory> </VirtualHost> 
IIS
<system.webServer>
  <rewrite>
    <rules> <rule name="Main Rule" stopProcessing="true"> <match url=".*" ></match> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" ></add> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" ></add> </conditions> <action type="Rewrite" url="/" ></action> </rule> </rules> </rewrite> </system.webServer> 
Express
var express = require('express');
var app = express(); app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: __dirname }); }); app.listen(8080); //the port you want to use

3.WebServer地址转发

tomcat

这里需要使用到UrlRewriteFilter这个插件,使用方法: 1.将urlrewritefilter-4.0.3.jar包放入应用目录“WEB-INF/lib”下。 2.在WEB-INF/web.xml配置文件中加入:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> 

3.在WEB-INF目录新建“urlrewrite.xml”转发规则文件。内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
   <rule> <from>^/[a-zA-Z]+(/([a-zA-Z]|[0-9])*)*$</from> <to>/index.html</to> </rule> </urlrewrite> 

其中rule部分匹配地址用到了正则表达式,这里不赘述。这样就将规则设置完成了,重启tomcat刷新页面,没有#也不会404了。

Nginx

Nginx用到的是try_files,修改nginx的配置文件,增加try_files配置。

server {
    server_name localhost;
    root /www;
    location / {
        try_files $uri $uri/ /index.html; } } 

其中root的目录,对应ng-app的定义文件html的目录

Apache
<VirtualHost *:80>
    ServerName localhost

    DocumentRoot /www

    <Directory /www>
        RewriteEngine on # Don't rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L] </Directory> </VirtualHost> 
IIS
<system.webServer>
  <rewrite>
    <rules> <rule name="Main Rule" stopProcessing="true"> <match url=".*" ></match> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" ></add> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" ></add> </conditions> <action type="Rewrite" url="/" ></action> </rule> </rules> </rewrite> </system.webServer> 
Express
var express = require('express');
var app = express();
app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: __dirname }); }); app.listen(8080); //the port you want to use


  
WebServer地址转发配置根据个人项目选择配置,本人用到的是tomcat,其他没有测试。
传送门:http://www.cnblogs.com/softidea/archive/2016/07/07/5651421.html
<think>嗯,用户想从HTML代码中移除标题栏。首先,我需要理解标题栏在HTML中的具体表现形式。通常,标题栏可能指浏览器的默认标题栏,但根据用户提到的参考引用[1],可能是指网页内部自定义的标题栏,比如用div或header标签创建的。不过,也有可能用户混淆了浏览器标题栏和页面内的标题栏。 参考引用[1]提到的是去除系统自带的标题栏,比如在Android应用中,但用户现在问的是HTML,所以需要调整思路。在网页中,标题栏通常是开发者自己用HTML元素(如div、header)构建的,而不是浏览器自带的。因此,移除方法可能涉及CSS或JavaScript。 用户提供的引用[3]提到用CSS实现表格行变色,可能相关的是通过CSS来隐藏元素。比如,使用display: none;或者visibility: hidden;。但具体要看标题栏的结构。 可能的步骤:首先检查HTML结构,找到标题栏对应的元素,比如一个div的id或class,然后通过CSS或JavaScript将其隐藏。例如,如果标题栏的id是"header",那么添加样式#header { display: none; }。 另外,可能需要考虑是否使用框架,比如Bootstrap,不同的框架可能有不同的类名需要处理。还要确认是否有JavaScript动态生成标题栏,这时候需要修改相应的脚本。 另外,用户可能误以为浏览器的标题栏(即页面标题)可以移除,但实际上这是由浏览器控制的,无法通过HTML/CSS修改。只能修改页面内的元素。 综上,应该指导用户检查他们的HTML结构,找到对应的元素,并通过CSS隐藏。同时,提醒用户区分浏览器标题和页面内的标题栏。</think>要从HTML代码中移除标题栏,需要根据标题栏的实现方式选择对应的解决方案。以下是三种常见方法及其技术细节: ### 方法一:CSS样式隐藏(推荐) ```html <style> .title-bar { display: none; /* 完全移除元素及占位空间 */ } /* 或 */ #custom-header { visibility: hidden; /* 隐藏元素但保留占位空间 */ } </style> ``` *适用场景*:当标题栏由`<div class="title-bar">`或`<header id="custom-header">`等普通HTML元素构成时[^3]。 ### 方法二:框架组件移除 ```javascript // 假设使用Vue框架 <template> <div v-if="!hideHeader"> <!-- 标题栏内容 --> </div> </template> <script> export default { data() { return { hideHeader: true } } } </script> ``` *适用场景*:当标题栏由前端框架(Vue/React/Angular)动态渲染时[^3]。 ### 方法三:浏览器全屏模式 ```javascript // 通过Fullscreen API实现 document.documentElement.requestFullscreen(); ``` *特点*:这会隐藏浏览器自带的地址栏和标签页头,但无法移除页面内的自定义标题栏[^1]。 ### 操作步骤 1. 按F12打开开发者工具 2. 使用元素选择器定位标题栏元素 3. 检查元素的class/id标识 4. 根据标识编写对应的CSS隐藏规则 $$ \text{布局影响评估} = \begin{cases} display:none & \text{完全移除,引发布局重排} \\ visibility:hidden & \text{保留占位,视觉隐藏} \end{cases} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值