Angular JS 路由在 URL 中显示文件名(在本地主机中)
Angular JS routing is showing the file name in the URL (in localhost)
我在 visual studio 2010 年有一个网站(不是项目只是网站)。只有 angular 和 HTML 代码。
当我使用 IE 进行调试时,我的路由当前正在工作,但它在 URL 中显示我的第一页(我的单页应用程序)的文件名,如下所示:
http://localhost:1349/DP/index.html#/home
路由是这样工作的,但我不想看到文件名 "index.html" 或“#”符号。我见过很多解决方案并尝试过很多东西。 None 其中工作正常(所以我不会 post 所有在这里没有工作的东西)。
我页面的链接是:
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#history">History</a></li>
<li><a href="#coachs">Coachs</a></li>
<li><a href="#activities">Activities</a></li>
<li><a href="#calender">Calender</a></li>
<li><a href="#gallery">Gallery</a></li>
<li><a href="#fundraisers">Fundraisers</a></li>
<li><a href="#links">Links</a></li>
<li><a href="#styletesting">Test Styles</a></li>
路由代码是:
[(函数(){
'use strict';
var app = angular.module('app', ['ngRoute']);
// configure our routes
app.config(['$routeProvider','$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider
// catch all go home
.when('/', {
templateUrl: 'home.html',
controller: 'homeController'
})
// route for the home page
.when('/home', {
templateUrl: 'home.html',
controller: 'homeController'
})
// route for the about page
.when('/about', {
templateUrl: 'about.html',
controller: 'aboutController'
})
// route for the contact page
.when('/contact', {
templateUrl: 'navbar.html',
controller: 'contactController'
})
// catch all go home
.when('/styletesting', {
templateUrl: 'styleTesting.html',
controller: 'styletestController'
})
/*
// happens when nothing specificed
.otherwise({
redirectTo: '/'
})
*/
/*
// not working/finding sites
// if you don't wish to set base URL then use this
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
*/
}]);]
如您所见,我已将 locationprovider 注释掉,因为它不起作用。我试过了,但也没用。
在我尝试各种解决方案后,我得到了一个 404,我的页面加载了,但没有加载 ng-view 页面中的部分(所以页眉和页脚出现了,这就是 index.html).
我需要做什么才能在不显示页面的情况下正常工作?URL?
注意:我正在本地主机上开发(IIS included/embeded in Visual Studio 2010,不是独立的 IIS),我想将其部署到根域名下的 Web 主机服务器.所以它需要为两者工作(所以我不能硬编码完整 url paths/etc)。
它在 angular 中被称为漂亮 URL。你需要做三件事。
1) 在 app.js
中,您必须注入 $locationProvider
服务并启用 html5Mode
路由。 html5Mode
路由仅适用于支持 HTML5.
的浏览器
app.config(["$locationProvider",
function($locationProvider) {
$locationProvider.html5Mode(true);
}
]);
如果您好奇,可以查看浏览器的 html5 历史记录 API。如果不支持,它将自动回退到使用 hash URL 方法。
https://scotch.io/tutorials/pretty-urls-in-angularjs-removing-the-hashtag
if(window.history && window.history.pushState){
$locationProvider.html5Mode(true);
}
2) 您需要在索引文件的head
标签中设置base
标签。
<head>
<meta charset="utf-8">
<base href="/">
</head>
如果不想设置base href标签,也可以这样做
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
3) 配置服务器设置
阿帕奇:
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 resource doesn't exist, use index.html
RewriteRule ^ /index.html
IIS:
<system.webServer>
<rewrite>
<rules>
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
我在 visual studio 2010 年有一个网站(不是项目只是网站)。只有 angular 和 HTML 代码。
当我使用 IE 进行调试时,我的路由当前正在工作,但它在 URL 中显示我的第一页(我的单页应用程序)的文件名,如下所示: http://localhost:1349/DP/index.html#/home
路由是这样工作的,但我不想看到文件名 "index.html" 或“#”符号。我见过很多解决方案并尝试过很多东西。 None 其中工作正常(所以我不会 post 所有在这里没有工作的东西)。
我页面的链接是:
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#history">History</a></li>
<li><a href="#coachs">Coachs</a></li>
<li><a href="#activities">Activities</a></li>
<li><a href="#calender">Calender</a></li>
<li><a href="#gallery">Gallery</a></li>
<li><a href="#fundraisers">Fundraisers</a></li>
<li><a href="#links">Links</a></li>
<li><a href="#styletesting">Test Styles</a></li>
路由代码是:
[(函数(){ 'use strict';
var app = angular.module('app', ['ngRoute']);
// configure our routes
app.config(['$routeProvider','$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider
// catch all go home
.when('/', {
templateUrl: 'home.html',
controller: 'homeController'
})
// route for the home page
.when('/home', {
templateUrl: 'home.html',
controller: 'homeController'
})
// route for the about page
.when('/about', {
templateUrl: 'about.html',
controller: 'aboutController'
})
// route for the contact page
.when('/contact', {
templateUrl: 'navbar.html',
controller: 'contactController'
})
// catch all go home
.when('/styletesting', {
templateUrl: 'styleTesting.html',
controller: 'styletestController'
})
/*
// happens when nothing specificed
.otherwise({
redirectTo: '/'
})
*/
/*
// not working/finding sites
// if you don't wish to set base URL then use this
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
*/
}]);]
如您所见,我已将 locationprovider 注释掉,因为它不起作用。我试过了,但也没用。
在我尝试各种解决方案后,我得到了一个 404,我的页面加载了,但没有加载 ng-view 页面中的部分(所以页眉和页脚出现了,这就是 index.html).
我需要做什么才能在不显示页面的情况下正常工作?URL?
注意:我正在本地主机上开发(IIS included/embeded in Visual Studio 2010,不是独立的 IIS),我想将其部署到根域名下的 Web 主机服务器.所以它需要为两者工作(所以我不能硬编码完整 url paths/etc)。
它在 angular 中被称为漂亮 URL。你需要做三件事。
1) 在 app.js
中,您必须注入 $locationProvider
服务并启用 html5Mode
路由。 html5Mode
路由仅适用于支持 HTML5.
app.config(["$locationProvider",
function($locationProvider) {
$locationProvider.html5Mode(true);
}
]);
如果您好奇,可以查看浏览器的 html5 历史记录 API。如果不支持,它将自动回退到使用 hash URL 方法。 https://scotch.io/tutorials/pretty-urls-in-angularjs-removing-the-hashtag
if(window.history && window.history.pushState){
$locationProvider.html5Mode(true);
}
2) 您需要在索引文件的head
标签中设置base
标签。
<head>
<meta charset="utf-8">
<base href="/">
</head>
如果不想设置base href标签,也可以这样做
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
3) 配置服务器设置
阿帕奇:
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 resource doesn't exist, use index.html
RewriteRule ^ /index.html
IIS:
<system.webServer>
<rewrite>
<rules>
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>