我有一个AngularJS(1.4.5)网站放在apache2服务器上,该服务器有一个小的NodeJS实例,用于与后端进行通信并托管网站,我使用apache2 sites-available.conf
文件重定向端口
今天的网址如下:
http://prod.mywebsiteurl.com/myapp/#/mp
最后一条路径是动态的,当Angular应用程序启动时,它采用最后一个参数:(我已使用$ routeProvider
配置此参数dynamicUrl = $routeParams.dynamicUrl;
在init()
函数中。
当我使用
启用html5mode
时
$locationProvider.html5Mode(true);
我无法访问该网站:
http://prod.mywebsiteurl.com/myapp/mp
它给出了apache2错误。
Cannot GET /MP (404)
但是,如果我输入旧地址,则#
会重定向到网站而不会 #
。
知道如何解决这个问题吗?这是apache2配置吗?如果是这样?我该怎么做?我是一个真正的apache2菜鸟。
我想我必须有一个.htaccess文件并使用这个小重写规则。
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
我在此页面上找到了它:https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/
但是我使用Node作为网络服务器,所以我真的不知道放置文件的位置,服务器是Ubuntu服务器。我将它放在NodeJS根目录中,但这似乎不能很好地工作。
任何帮助表示感谢。
答案 0 :(得分:0)
我想,对于你的角度应用程序,你只有一个入口点(index.html),然后内部路由将为你做一切。您在节点中需要做的就是每次调用都返回index.html。
不幸的是,如果没有框架,sou没有说明你在节点中使用了什么。假设您正在运行快速实例,您可以执行以下操作:
var express = require('express');
var server = express();
server.use('/public', express.static(__dirname + '/public'));
server.get('/*', function(req, res){
res.sendFile(__dirname + '/index.html');
});
var port = 8000;
server.listen(port, function() {
console.log('server listening on port ' + port);
});
server.get('/*'
这将基本接受任何调用,并始终返回index.html。所以您的角度应用程序可以开始