AngularJS html5Mode刷新失败

时间:2014-07-09 14:44:54

标签: javascript html5 angularjs

所以这是我的路由器:

var app = angular.module('tradePlace', ['ngRoute', 'tradeCntrls']);
app.config(['$routeProvider', '$locationProvider', function($route, $location) {
    $route.
    when('/', {
        redirectTo: '/index'
    }).
    when('/index', {
        templateUrl: './includes/templates/index.php',
        controller: 'indexCntrl'
    }).
    when('/register', {
        templateUrl: './includes/templates/register.php',
        controller: 'indexCntrl'
    }).
    otherwise({
        redirectTo: '/index'
    });

    $location.html5Mode(true);
}])

我的html5模式为true,所以现在URL中没有#。

如果我去mysite.com/它会将我重定向到/ index但是当我重新加载页面(f5)或转到mysite.com/index时我收到404错误。

有没有办法解决这个问题?或者只是不使用html5模式?

3 个答案:

答案 0 :(得分:1)

如果不从服务器运行项目并执行一些特殊工作来路由请求,则无法解决此问题。它涉及以下步骤:

  1. 捕获静态文件请求(例如图像文件)
  2. 将其他请求发送到您的index.html以由路由器处理
  3. 例如,使用nodeJS express服务器,它看起来像这样:

    // Capture real static file requests
    app.use(express.static(__dirname + '/public'));
    
    // All get requests not captured above go to the client.
    server.get('*', function (req, res) {
        res.sendfile(__dirname + '/public/index.html');
    });
    

    请注意,这不是Angular特定的问题。必须使用html5 pushState为任何客户端应用程序执行相同的步骤。

答案 1 :(得分:0)

在.htaccess中使用Apache:

RewriteEngine On

RewriteBase /

RewriteRule ^index.php - [L]

#your static data in the folder app
RewriteRule ^app - [L]

#everything else
RewriteRule ^(.*)$ index.php?para=$1 [QSA,L]

编辑:

整个请求的url作为para文件传递给php文件。如果需要,您可以使用$_GET['para']在php skript中进一步处理此问题。

Apache重写您的请求并提供符合规则的文件。

即。请求:

答案 2 :(得分:0)

在.htacces或.conf中添加 在模块目录上  AllowOverride All usuallity be None