Маршруты 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 / на #!/

Попробуйте либо:

  1. Удаление решимости из вашего маршрута.
  2. Добавьте ниже код после конфигурации:

    $ LocationProvider.hashPrefix("");

  3. Поделитесь URL-адресом, который вы используете для доступа к странице.

  4. Удалите окончание "/" в вашей базе.

Другие вопросы по тегам