Маршруты AngularJS возвращают ошибку 404 при обновлении страницы
Я новичок в angularJS, и я люблю программировать с ним. В настоящее время я создаю веб-портал с использованием angularJS, и каждая из моих страниц использует ngRoute
, Это работает нормально для меня, но когда я попытался обновить страницу, он возвращает мне 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 ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 http://localhost/cvsrrc/page-not-found
3 ответа
Наконец, я нашел решение, я уже встречал это решение раньше, но оно не работает для меня, потому что я забыл удалить /localhost/
от .htaccess
! Вот:
<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>
Так как вы использовали <base href="/cvsrrc/" />
а также $locationProvider.html5Mode(true).hashPrefix('!');
Ваш URL удален #! из URL и добавляет cvsrrc/. так что это будет работать, если вы перенаправите приложение из приложения.
Но когда вы перезагрузите страницу, она попытается использовать url с cvsrrc /, чтобы найти путь, которого на самом деле нет.
Поэтому вы должны использовать модуль перезаписи на вашем сервере, чтобы указать перенаправить cvsrrc / на #!/
Попробуйте либо:
- Удаление решимости из вашего маршрута.
Добавьте ниже код после конфигурации:
$ LocationProvider.hashPrefix("");
Поделитесь URL-адресом, который вы используете для доступа к странице.
Удалите окончание "/" в вашей базе.