【发布时间】:2014-09-25 00:03:46
【问题描述】:
我正在使用$locationProvider.html5Mode(true) 在地址栏中隐藏# 标签。
angular.module('witnessApp',['ngRoute','witnessApp.Service','witnessApp.Controller','ui.bootstrap','ngAnimate','ngTouch','growlNotifications', 'ngSanitize'])
.config(function ($routeProvider,$provide,$locationProvider) {
var loginReq;
$routeProvider
.when('/login', {
templateUrl: 'views/login.html',
controller:'LoginCtrl',
access: { "requiredLogin": false }
})
.otherwise({
redirectTo: '/login'
})
$locationProvider.html5Mode(true);
})
当应用程序启动时,它重定向到(登录页面)localhost:3000/login(它从 localhost:3000/#/login 中删除 # 符号)但是当我手动输入或点击 localhost:3000/login 时它不会重定向到登录页。因为它使用这个来调用api。为什么它不重定向到登录? 我怎样才能从角度完全删除#标签?即使我手动点击 url,我也不需要 # in angular route。有没有其他方法可以解决这个问题?
已编辑:-
我在后端使用 express 框架。 server.js 的代码:
var express = require('express'),
app = module.exports = express();
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + "/views");
app.set('view engine', 'html');
app.use(express.static(__dirname + "/public"));
app.get('/', function(req, res) {
res.render('index');
});
app.listen(process.env.PORT || 3000);
console.log('[Application] on port 3000');
有些人(在下面评论)建议在后端处理这条路线。但我不知道。你能建议我怎么做吗?
【问题讨论】:
-
如果
/login将转到您的api,您可能需要将您的api 移动到另一个路径,例如/api/*,以便您可以将所有不是/api/*的内容重写为@987654327 @ -
您需要服务器端配置,将路由责任移交给客户端。所以服务器应该总是默认路由到/或加载 index.html 并且从那里只有客户端应该处理路由
-
您使用的是哪个网络服务器? nginx的?阿帕奇?
-
我正在使用 Apache 服务器
标签: javascript angularjs apache nginx url-rewriting