По-прежнему получается "Не найден" при ручном обновлении с помощью 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