2016-09-22 6 views
4

私は今、私のAngular 2 Applicationを完成させています。私はそれをどのようにホストするのかと思います。配備されたアプリでURLを書き換えてAngular 2 Routerを動作させるにはどうすればいいですか?

私はちょうど私のローカルホスト上でアプリケーションを構築しようとしましたが、実際にはすべて正常に動作するようですが、アプリケーションのRouterが必要です。 URLを書き換えてルートにアクセスすることはできません。なぜなら、おそらくroutesではなく、一部のファイルと.htaccess RewriteRulesを探しているからです。 [routerLink]を管理パネル用に、他のものを公開(ハイパーリンクと見なす)したくないので、URLを書き換えてルートにアクセスできるようにすることが重要です。

より具体的には... 私はそれがとてもlist/page/1は、角2ルータによって追加されhttp://localhost/FinalApp/list/page/1に私をナビゲートするためにルータを使用していますhttp://localhost/FinalApp/ご覧ください。 [routerLink]さんはすべて正しく動作しています。 http://localhost/FinalAll/list/category/3私はそれらをクリックすると手動でURLを書き換えて管理パネル(私はhttp://localhost/FinalApp/adminを追加していますので、最終的なURLはhttp://localhost/FinalApp/adminのように見えます)、404エラー(ルーターのデフォルトルート、サーバ側404)。

URLを手動で書き換えて、角度2ルータを使用できるようにしたいと考えています。

何かが見つからないのですか、それとも不可能ですか?

+0

あなたが持っている可能性があり、 '<基本のhref = "/管理">'あなた 'index.html'にあなたは必要ありませんので、 –

答えて

4

この問題はHashLocationStrategyを実装することで解決され、すべてのルートに#が追加されます。http://localhost/FinalApp/list/page/1http://localhost/#/FinalApp/list/page/1になります。あなたはHashLocationStrategyAppModuleにプロバイダを追加することでこれを実現:

{ provide: LocationStrategy, useClass: HashLocationStrategy } 

あなたは@angular/commonからLocationStrategyHashLocationStrategyをインポートする必要があります。

import { LocationStrategy, HashLocationStrategy } from '@angular/common'; 

あなたはRC4以下を使用している場合、あなたはbootstrap方法にこれを追加します。

bootstrap(
AppComponent, 
    [ 
     { provide: LocationStrategy, useClass: HashLocationStrategy } 
    ]); 
+1

これは解決策ですが、 '.htaccess'ファイルに" HTML 5 URL "を設定しておくことは可能です。 –

+0

素晴らしい。ありがとう、完璧に動作します。 .htaccessなどのURLから '#'を隠す方法があるのなら、今、あなたはいないでしょうか? –

+0

@DawidZbiński正直言って、私は '#'を付け加えることなくそれを行う方法があることを知っていましたが、私はそれをやろうとはしませんでした。たぶん@NoémiSalaünが何か新しいことを教えてくれるかもしれないが、私は感謝するだろう。 :-) –

0

これはサーバー側ルーティングによるものです。リンクhrefを使用して、ブラウザは、あなたがアプリケーションがホストされているサーバにリクエストしています。 1つのページアプリに目的のパスをルーティングするようにWebサーバーを設定していない場合は、サーバー上でhttp://localhost/FinalApp/adminに格納されているものを探します。ブラウザでurlを維持するためにURL書き換えを使用するが、アプリケーションを提供する場合、アプリケーションはそれがロードされるとすべてのルーティングを行います。ここでは些細なおよび未テストの例です:

例使用してApacheのリライト

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(/.*)$ /index.html [L] 
関連する問題