По-прежнему получается "Не найден" при ручном обновлении с помощью angular.js route

После прочтения тонны вопросов с комментариями и stackoverflow на пути Angular.js, я все еще получаю ошибку "Not Found" при обновлении вручную.

Шаги:

  • перейдите к localhost → из-за моей конфигурации (ниже), меня доставят в localhost/home. Просмотры и все загружаются нормально.
  • нажмите обновление в браузере → браузер отображает это Not Found: the requested /home is not found on this server

Этот вопрос, вероятно, наиболее похож на Обновление страницы дает" Страница не найдена "

Моя конфигурация

// Routing configuration.
angular.module('myModule')
    .config(['$routeProvider', '$locationProvider', 
    function ($routeProvider, $locationProvider) {
        // Enable pushState in routes.
        $locationProvider.html5Mode(true);

        $routeProvider
            .when('/home', {
                templates: {
                    layout: '/views/home.html'
                },
                title: 'Welcome!'

            })
            .when('/launchpad', {
                templates: {
                    layout: '/views/layouts/default.html',
                    content: '/views/partials/profile.html'
                },
                title: "Launchpad"
            })
            .otherwise({
                redirectTo: '/home'
            });

    }
]);

Другие вещи, которые я сделал:

  • В моем index.html у меня уже есть <base href="/">
  • обновлен до angular 1.2.1

Вот правила htaccess, которые я пробовал. Ничего не работает.

from Обновление страницы дает" Страница не найдена "

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteCond %{REQUEST_URI} !.*\.(css|js|html|png) #Add extra extensions needed.
    RewriteRule (.*) index.html [L]
</ifModule>

из http://ericduran.io/2013/05/31/angular-html5Mode-with-yeoman/

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)       /index.html/#!/$1 
</IfModule>

Ответ 1

Я не знаю, является ли это оптимальным решением, но я нашел комбинацию настроек, которые работали:

  • Включить hashPrefix('!') (см. ниже)
  • Не включил <base href="/"> в мой index.html
  • Добавил FallbackResource /index.html в мой раздел <Directory PATH_TO_WWW_FILES> на моем сервере .conf файл за этот пост. После установки этого не было похоже, какие были локальные настройки mod_rewrite.
// Routing configuration.
angular.module('myModule')
    .config(['$routeProvider', '$locationProvider', 
    function ($routeProvider, $locationProvider) {
        // Enable pushState in routes.
        $locationProvider.html5Mode(true).hashPrefix('!');

        $routeProvider
            .when('/home', {
                templates: {
                    layout: '/views/home.html'
                },
                title: 'Welcome!'

            })
            .when('/launchpad', {
                templates: {
                    layout: '/views/layouts/default.html',
                    content: '/views/partials/profile.html'
                },
                title: "Launchpad"
            })
            .otherwise({
                redirectTo: '/home'
            });

    }
]);

Ответ 2

Этот параметр .htaccess работал хорошо для меня

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/$
    RewriteRule (.*) /#!/$1 [NE,L,R=301]
</IfModule>

Ответ 3

Для людей, которые все еще сталкиваются с этой ошибкой, с SSL или без него:

Убедитесь, что Allowoverride установлен в apacheconfig, например.

<Directory "/var/www/mysite/public_html">
    AllowOverride All
</Directory>

для обоих портов используется SSL

Ответ 4

Я не мог комментировать, но также использовал HTML mode, base href="/", sudo a2enmod rewrite, используя .htaccess rewrite. Из Unispaw мне пришлось AllowOverride All в и сайты, доступные на вашем сайте и, /etc/apache2 apache.conf