AngularJS 路由 returns 刷新页面时出现 404 错误
AngularJS routes returns 404 error when page is being refresh
我是 angularJS 的新手,我喜欢用它编码。我目前正在使用 angularJS 构建一个门户网站,我的每个页面都使用 ngRoute
。它对我来说很好,但是当我尝试刷新页面时,它 returns 我 404 error / page not found
。在这个问题上我该怎么办?这是我的代码:
var app = angular.module("CVSRRC", ['ngMaterial','ngRoute']);
app.controller('CVSRRC-CTRL', function($scope, $http, ...){
// some codes here...
});
app.config(function($routeProvider, $locationProvider){
$locationProvider.html5Mode(true).hashPrefix('!');
$routeProvider
.when('/', {
templateUrl: '_pages/home',
controller: 'homeCTRL',
resolve: {
delay: function($q, $timeout){
var delay = $q.defer();
$timeout(delay.resolve, 1000);
return delay.promise;
}
}
})
...etc...
.otherwise({
redirectTo: '/'
});
});
在我的 HTML
<html>
<head>
<base href="/cvsrrc/" />
</head>
<body ng-app="CVSRRC" ng-controller="CVSRRC-CTRL">
<div class="row" id="main">
<div ng-view ng-show="statechange"></div>
<div ng-show="!statechange" cvsrrc-resolve>
<div id="_loader_"></div>
</div>
</div>
<a href="about-us">About</a>
<a href="login">login</a>
//etc
</body>
</html>
我的 .htaccess 看起来像
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
ErrorDocument 404 http://localhost/cvsrrc/page-not-found
由于您使用了 <base href="/cvsrrc/" />
和 $locationProvider.html5Mode(true).hashPrefix('!');
,因此您的 url 已删除 #!来自 url 并添加 cvsrrc/.因此,如果您从 app.
重定向应用程序,它将起作用
但是当您重新加载页面时,它会尝试使用 url 和 cvsrrc/ 来查找实际不存在的路径。
所以你必须在你的服务器上使用重写模块来告诉重定向 cvsrrc/ 到 #!/
试试看:
- 正在从您的路线中删除决心。
配置后添加以下代码:
$locationProvider.hashPrefix("");
分享您用来访问页面的url。
删除你的基地中的结尾“/”。
终于我找到了一个解决方案,我之前已经遇到过这个解决方案但是它对我不起作用,因为我忘记从 .htaccess
中删除 /localhost/
!这是:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule (.*) /cvsrrc/index.php [L]
</IfModule>
我是 angularJS 的新手,我喜欢用它编码。我目前正在使用 angularJS 构建一个门户网站,我的每个页面都使用 ngRoute
。它对我来说很好,但是当我尝试刷新页面时,它 returns 我 404 error / page not found
。在这个问题上我该怎么办?这是我的代码:
var app = angular.module("CVSRRC", ['ngMaterial','ngRoute']);
app.controller('CVSRRC-CTRL', function($scope, $http, ...){
// some codes here...
});
app.config(function($routeProvider, $locationProvider){
$locationProvider.html5Mode(true).hashPrefix('!');
$routeProvider
.when('/', {
templateUrl: '_pages/home',
controller: 'homeCTRL',
resolve: {
delay: function($q, $timeout){
var delay = $q.defer();
$timeout(delay.resolve, 1000);
return delay.promise;
}
}
})
...etc...
.otherwise({
redirectTo: '/'
});
});
在我的 HTML
<html>
<head>
<base href="/cvsrrc/" />
</head>
<body ng-app="CVSRRC" ng-controller="CVSRRC-CTRL">
<div class="row" id="main">
<div ng-view ng-show="statechange"></div>
<div ng-show="!statechange" cvsrrc-resolve>
<div id="_loader_"></div>
</div>
</div>
<a href="about-us">About</a>
<a href="login">login</a>
//etc
</body>
</html>
我的 .htaccess 看起来像
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
ErrorDocument 404 http://localhost/cvsrrc/page-not-found
由于您使用了 <base href="/cvsrrc/" />
和 $locationProvider.html5Mode(true).hashPrefix('!');
,因此您的 url 已删除 #!来自 url 并添加 cvsrrc/.因此,如果您从 app.
但是当您重新加载页面时,它会尝试使用 url 和 cvsrrc/ 来查找实际不存在的路径。
所以你必须在你的服务器上使用重写模块来告诉重定向 cvsrrc/ 到 #!/
试试看:
- 正在从您的路线中删除决心。
配置后添加以下代码:
$locationProvider.hashPrefix("");
分享您用来访问页面的url。
删除你的基地中的结尾“/”。
终于我找到了一个解决方案,我之前已经遇到过这个解决方案但是它对我不起作用,因为我忘记从 .htaccess
中删除 /localhost/
!这是:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule (.*) /cvsrrc/index.php [L]
</IfModule>