2017-01-08 2 views
0

Недавно я обновил приложение, над которым я работал, до последней версии Angular CLI (в настоящее время beta25). Использование ng служит для всех маршрутов.Угловое 2 приложение CLI бросает 404 ошибки после развертывания

Затем я использую ng build -prod, застегиваю каталог dist и загружаю его на свой веб-сервер (в настоящее время размещен на AWS Tomcat). Когда я перемещаю index.html, я использую маршрут по умолчанию, чтобы перейти в «домашний» компонент. Все работает до этого момента. Если я обновить браузер, однако, я получаю 404. Кроме того, любая прямая и глубокая связь навигации я пытаю другие виды в приложении бросить 404, а также (Вот мой app.routing.ts для справки)

import { Routes, RouterModule } from '@angular/router'; 

import { HomeComponent } from './home/home.component'; 
import { SolutionComponent } from './solution/solution.component'; 
import { AssetComponent } from './asset/asset.component'; 
import { PropertyComponent } from './property/property.component'; 

export const appRoutes: Routes = [ 
{ 
    path: 'home', 
    component: HomeComponent 
}, 
{ 
    path: 'solution', 
    component: SolutionComponent 
}, 
{ 
    path: 'asset', 
    component: AssetComponent 
}, 
{ 
    path: 'asset/:solutionId', 
    component: AssetComponent 
}, 
{ 
    path: 'property/:solutionId', 
    component: PropertyComponent 
}, 
{ 
    path: 'property', 
    component: PropertyComponent 
},  
{ 
    path: '', 
    redirectTo: '/home',   
    pathMatch: 'full' 
}, 
]; 

Я читал в других сообщениях, что это может быть связано с PathLocationStrategy, и one in particular указал, что мне нужно настроить базовый уровень href следующим образом.

<!doctype html> 
<html> 
<head> 
    <base href="./"> 

Я пробовал развернуть версии приложения с точкой и без нее, и проблема все еще сохраняется. Я немного в тупике. Я читал о людях, имеющих похожие проблемы, но не нашел хорошего документа, документально подтвержденного. Я надеюсь, что кто-то из сообщества Angular 2 может помочь пролить свет на то, что происходит, и дать мне представление о том, как двигаться вперед. Заранее спасибо!

EDIT 1/15/2017: В случае, если это полезно для всех, я хотел повернуть назад и выделить пару вещей, которые мне нужно было сделать, чтобы развернуть мое «законченное» приложение CLI Angular2 в размещенной среде.

Во-первых, чтобы включить Rewrite Valve на Apache Tomcat8 на AWS (довольно стандартный вариант хостинга) Мне пришлось использовать функцию ebextensions ElasticBeanstalk, чтобы поменять местами файл context.xml с включенным клапаном перезаписи Tomcat. Файл сервера update.config выглядел как это для меня:

container_commands: 
    replace-config: 
    command: cp .ebextensions/context.xml /etc/tomcat8/context.xml 

Во-вторых, URL Rewrite себя. может быть более элегантный способ сделать это, что не произошло со мной еще, но мой rewrite.config в настоящее время выглядит следующим образом:

# match requests for basic resource files and pass them through without substitution 
RewriteCond %{REQUEST_URI} ^.*\.(css|js|jpg|png|ico|woff2|woff|ttf).*$ 
RewriteRule ^.*$ - [L] 

# app-specific rules 
# match app routes and redirect to index.html 
RewriteCond %{REQUEST_URI} ^.*\/home.*$ [OR] 
RewriteCond %{REQUEST_URI} ^.*\/solution.*$ [OR] 
RewriteCond %{REQUEST_URI} ^.*\/asset.*$ [OR] 
RewriteCond %{REQUEST_URI} ^.*\/property.*$ 
RewriteRule ^.*$ /index.html [L] 
+0

Вам нужно настроить переписывание URL на свой сервер, увидев сообщение в день или около того, не может его найти. – 12seconds

+0

просто без. и если у вас есть приложение в папке, где вы его создаете, попробуйте somthing like или

+0

см. этот ответ http: // stackoverflow.com/questions/41519810/refresh-page-got-404-only-happen-when-using-dist-folder/41523241 # 41523241 – Sebastian

ответ

0

Вам необходимо включить поддержку html5 на PushState вашем веб-сервере.

Это очень тривиально для nginx, Apache и IIS, а также для других веб-серверов.

Это делается с помощью набора правил перезаписи, которые реализуют следующие условия:

  • , если запрос на файл, который существует, вернуть его
  • иначе возвращать одно и то index.html

Поиск Google для инструкций на вашем конкретном веб-сервере должен начать вас.

+0

Мне потребовалось некоторое время, чтобы проверить ваши инструкции, потому что я путешествовал, но, наконец, получил url re написав работу над Apache сегодня утром. Я вижу небольшую странность в том, что для перехода на предыдущую страницу требуется два щелчка кнопки «Назад», но я могу жить с этим на данный момент, я полагаю. По крайней мере, мое приложение работает правильно. Большое спасибо за вашу помощь. – rswillis

+1

@ rswillis, пожалуйста, уточните, какие изменения вы внесли в эту проблему. .. Я получаю такую ​​же проблему на сервере Apache. –

Смежные вопросы