angular 4プロジェクトがあり、localhost:4200/route-a
から実行すると正常に動作し、ブラウザーを更新するとすべて正常に動作します。ただし、 ng build
をApacheから実行し、localhost/route-a
に移動すると、404
が返されます。ルーティングのコードは次のとおりです。
imports: [BrowserModule, HttpModule, FormsModule, RouterModule.forRoot([
{ path: 'home', component: HomeComponent },
{ path: 'route-a', component: RouteAComponent },
{ path: '', redirectTo: '/home', pathMatch: 'full' }
])]
Angularの問題ではありません。Apacheの設定に問題があります。AngularでHTML5モード(かなりのURL)を使用している場合は、すべてのリクエストを送信するようにApacheを構成する必要があります。サーバー上にindex.htmlファイルのリソースが存在しません。
これは、次の.htaccess構成で実行できます。
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
その理由は、/route-a
にアクセスしようとすると、Apacheサーバーがデフォルトでディレクトリroute-a
とその中のindex.htmlファイルを見つけようとするためです。しかし、そのディレクトリがないため、Apacheは404エラーを返しますか。
しかし、Apacheに伝えることで、場所やファイルが存在しないリクエストに応じて。 Angular htmlファイルを指定して送信するには、Angularルーターがそこから取得します。
Apacheバージョン2.2.16以降、これにはFallbackResourceディレクティブを使用できます。
<Directory "/var/www/my_blog">
FallbackResource index.php
</Directory>
チェック https://httpd.Apache.org/docs/trunk/rewrite/remapping.html#fallback-resource