2016-12-14 32 views
0

我在写一个使用AngularJS的SPA产品,由使用NodeJS的Express服务。 NodeJS/Express还为SPA提供了API。在生产中,SPA将坐在代理之后(Apache,或者将来可能是nginx) - 即使没有代理,也存在以下问题。 ngRoute用于提供路由。Angular ngRoute重定向到格式不正确的URL

我最初是在本地测试应用程序,一切工作正常。我将repo克隆到测试服务器,但出于某种原因,当我尝试使用该应用程序时,这些URL格式错误。

正常情况下,当页面加载应用程序重定向到localhost:8080/#/homehome是全部路径)。但是,在测试服务器上时,它会重定向到domain.com/#!/home#%2Fhome

如果我点击一个链接,该链接应该将URL更改为domain.com/#/quotations(href设置为相对,而不是绝对),我会得到domain.com/#!/home#%2Fquotations

我的路由器配置:

app.config(['$routeProvider', function($routeProvider){ 
    // Routes 
    $routeProvider 
    .when('/home', { 
     templateUrl: '/views/home/home.html' 
    }) 
    .when('/staff', { 
     templateUrl: '/module/staff/views/staff.html', 
     controller: 'staffController', 
     controllerAs: 'staff' 
    }) 
    .when('/error', { 
     templateUrl: '/views/error/error.html', 
     css: '/views/error/error.css' 
    }) 
    .otherwise({ 
     redirectTo: '/home' 
    }); 
}]); 

在我的主服务器的NodeJS文件我只使用web.use(Express.static('public_html'))设置快递服务包含SPA的文件夹public_html

我曾尝试将<base href="/">添加到我的index.html头部,但这没有什么区别。 Angular和Express都没有配置为执行与默认设置不同的任何操作来重写页面URL,所以我对这个问题非常困惑。

+0

是否有可能你正在使用的角度两个不同的库在您的测试和本地服务器?我看到“!”这个字符是1.6 – bhantol

回答

1

在角1.6 $现在的位置增加了一个“!”如果你想删除它,你可以这样做:

appModule.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.hashPrefix(''); 
}]); 

检查这个问题,可以帮助... Angular web app having extra ! in the url

0

根据您的路由选择,您应该在头标中使用<base href="@Url.Content("~/")" />,并使用$locationProvider.html5Mode(true);关于生产中的路由配置从url中删除#

这将解决问题,如果这样的作品,你总是可以恢复基于角的URL格式使用#

另一种选择是在您的节点配置使用此代码:

<VirtualHost *:80> 
    DocumentRoot "/public_html" 
    ServerName domain.com 
    ServerAlias www.domain.com 
</VirtualHost>