2017-06-14 18 views
0

これについては、多くの質問があります。私はそれらの多くを読んだことがあり、そのほとんどはIISの書き換えを構成するweb.configファイルのサンプルを指しています。しかし、これがダウン二回投票して死んでいるようだ、だからではなく、それを復活しようとしているの、私はここに私の問題を説明するだろうと考えられてきた角度ルーティングIIS - 書き換えは浅いパスでのみ動作します

Angular 2 application not working when moved into IIS virtual directory

:私の問題に最も近いポストはこれのようです。角度コードがコマンドを介して構築されhttp://127.0.0.1/angular-app/

ng build --base-href ./、得られ/dist/フォルダは、上記ローカルアドレスでホストされているコードである

コードでASP.NETアプリケーションとしてホストされています。

IISアプリケーションは、以下のweb.configファイルがあります。

http://127.0.0.1/angular-app/

http://127.0.0.1/angular-app/dashboard/

http://127.0.0.1/angular-app/heros/

:これは、これらのURLが予想されるコンテンツを返します設定で

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.5.2" /> 
     <httpRuntime targetFramework="4.5.2" /> 
    </system.web> 
    <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" /> 
      </conditions> 
      <action type="Rewrite" url="./" /> 
      </rule> 
     </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

URL書き換えルールがアプリケーションのベースディレクトリを正しく指しているため、vendor.js, main.jsなどのファイルが見つかります。

しかし、URIが長くなると、リライトルールは、リンクされたファイルのフォルダパスを1段階だけバックアップするように見えるようです。例えば、URL

http://127.0.0.1/angular-app/heros/20/

は正しく

しかしベースディレクトリからetcファイル、それはvendor.js, main.jsをロードしようとしているように見えるビット深く掘りindex.htmlを返すと、「アプリ・ロード」を表示します。 http://127.0.0.1/angular-app/heros/、ルートからまっすぐではなく、1つだけステップアップします。

これらのリンクもまた、index.htmlファイルにリダイレクトされるため、スクリプトはいずれもブラウザに配信されません。

私が代わりに./

<base href="/"> 

を使用し、それに応じて再書き込みルールを改正しようとしているが、これは、リンクされた記事で示唆したように、常にhttp://127.0.0.1/

にコンテンツをリダイレクトする効果があります、私はにベースHREFを変更:

<base href="/angular-app/"> 

、これはcorrecからindex.htmlを返さtの位置。 しかし、etcファイルはまだサーバルート(http://127.0.0.1/

から要求されたvendor.js, main.jsは、私は私がルートから正しいパスを指すようにindex.htmlファイルを編集するだけで手でこの問題を解決することができ仮定しているが、これはそうです修正よりむしろハックのように。

ここで起こって、なぜいただきました!誰も説明できます:私はほとんどの人にとって

<base href="/"> 

仕事ではありませんか?

答えて

1

私のソリューション、

活用相対パスを使用して停止した.aspxページのパワー。すべてはハード私は私の/ srcに/フォルダに新しいDefault.aspxページを作成し、そして/dist/index.html

からこのコードを生成されたコードをコピーし

をコード化することができる方法は、これに微調整して、

基本的にサーバー上のasp.netアプリの院内代表を解決し、すべての参照にそのを書き出す
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="src_Default" %> 

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>angular-app</title> 
    <base href="<%=ResolveUrl("~/")%>"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="icon" type="image/x-icon" href="<%=ResolveUrl("~/favicon.ico")%>" > 
</head> 
<body> 
    <app-root>Loading...</app-root> 
    <script type="text/javascript" src="<%=ResolveUrl("~/inline.bundle.js")%>"></script> 
    <script type="text/javascript" src="<%=ResolveUrl("~/polyfills.bundle.js")%>"></script> 
    <script type="text/javascript" src="<%=ResolveUrl("~/styles.bundle.js")%>"></script> 
    <script type="text/javascript" src="<%=ResolveUrl("~/vendor.bundle.js")%>"></script> 
    <script type="text/javascript" src="<%=ResolveUrl("~/main.bundle.js")%>"></script></body> 
</html> 

から<base href="" />

を含むその後のコピーのDefault.aspxよう.angular-cli.jsonファイルを変更し、ビルドプロセスで

"assets": [ 
    "Default.aspx", 
    "Default.aspx.cs", 
    "web.config", 
    "assets", 
    "favicon.ico" 
    ], 

上/フォルダ/ distのに全体default.aspx.csファイルはまた、私は手動でそれをやっていた、これは私のweb.configファイルは経由でファイルをコピーするための正しい方法であることを発見しました - それは安堵です。

いくつかのIIS調整を行って、default.aspxが既定のドキュメントの上位にあることを確認した後、すべてが動作します。

今のところ解決策に見えますが、これらのファイルがバージョン管理されていれば問題になることがわかります。

関連する問題