删除Angular网址中的#

时间:2015-09-17 07:10:31

标签: angularjs node.js apache .htaccess apache2

我有一个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根目录中,但这似乎不能很好地工作。

任何帮助表示感谢。

1 个答案:

答案 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。所以您的角度应用程序可以开始