Angularjs html5mode обновить страницу получить 404
Я создал приложение, использующее AngularJS с GAE (Google App Engine - Java).
Я хочу преобразовать его в соответствие с SEO.
index.html
-
<meta name="fragment" content="!" />
-
<base href="/">
и тело загружается динамически через <div ui-view></div>
.
app.js
$locationProvider.html5Mode(true);
URL-адрес работает нормально, но когда я обновляю страницу, я получаю ошибку 404.
Есть ли у вас какая-то идея, что это значит?
Ответы
Ответ 1
Я уверен, что вы уже решили это, но для кого-то другого, сталкивающегося с этой проблемой:
В основном AngularJS $locationProvider.html5mode(true)
использует HTML5 history.pushState()
, который искусственно изменяет URL истории пользователя и адресной строки без перезагрузки страницы. Если вы создаете маршрут (Angular) для /about
, но у вас нет соответствующего маршрута на сервере, вы столкнетесь с проблемой, при которой перезагрузка страницы выявит тот факт, что она не существует на сервере. Самое простое решение - отобразить точку входа для вашего приложения (/index.html
?) Для всех маршрутов, доступных вашему приложению.
Смотрите: fooobar.com/questions/19820/...
Ответ 2
Это должно быть полезно, официальный angular doc;
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode
Ответ 3
Попробуйте добавить ниже раздел в разделе промежуточного программного обеспечения для файла cookie файла.
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
connect.static('.tmp'),
connect().use(
'/bower_components',
connect.static('./bower_components')
),
connect().use(
'/app/styles',
connect.static('./app/styles')
),
connect().use(
'/apply',
connect.static('./app/index.html')
),
connect.static(appConfig.app)
];
}
}
}
}
Ответ 4
Для приложения Java, работающего на GAE, вы можете использовать
Фильтр перезаписи URL
Вы найдете файл XML с именем urlrewrite.xml. Поместите все свои маршруты в этот xml и настройте его таким образом, чтобы при получении запроса, например:
- /местоположение/редактировать/120211
он будет перенаправлен на
- #/местоположение/редактировать/120211
и ваше приложение будет иметь время для загрузки и запуска маршрутизации
Ответ 5
для меня, исправить следующую строку в качестве первой строки внутри тега вашей индексной (главной) страницы:
<base href="/">
Кроме того, вам необходимо настроить правило перезаписи IIS следующим образом: (убедитесь, что вы сначала установите iis rewrite extension)
<system.webServer>
<rewrite>
<rules>
<rule name="AngularJS Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="(api)" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
<caching enabled="false" enableKernelCache="false" />
Ответ 6
Прошло некоторое время, так как люди искали этот ответ, но сегодня я нуждался в нем. Я сделал рабочий пример с GAE, angularJS и ng-Route, который имеет довольно отформатированные ссылки.
Вот ссылка на пример GitHub