IIS网站托管多个Angular应用程序

qq24tv8q  于 2023-08-05  发布在  Angular
关注(0)|答案(2)|浏览(125)

我希望在单个IIS虚拟目录上托管多个独立的angular应用程序

例如

  • mysite.com/admin
  • mysite.com/sales
  • mysite.com/inventory

如果我主机与文件夹然后网址到内页将无法工作
举例来说:

  • mysite.com/admin---工作
  • mysite.com/admin/home- Not working
f2uvfpb9

f2uvfpb91#

你只需要做下面的事情:
在index.file中设置基本href:


的数据

<base href="/app3/">

字符串
另一种是设置脚本链接,如下所示:

<script type="text/javascript" src="./runtime.js"></script>


你只需要添加。
所以你的整个代码看起来像:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>AngularApp2</title>
  <base href="/app3/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./favicon.ico">
</head>
<body>
<h2>app3</h2>
  <app-root></app-root>
<script type="text/javascript" src="./runtime.js"></script>
<script type="text/javascript" src="./es2015-polyfills.js" nomodule></script>
<script type="text/javascript" src="./polyfills.js"></script>
<script type="text/javascript" src="./styles.js"></script>
<script type="text/javascript" src="./vendor.js"></script>
<script type="text/javascript" src="./main.js"></script></body>
</html>


并且当您托管Angular应用程序IIS时,不要忘记将dist文件夹设置为文件夹路径。


2o7dmzc5

2o7dmzc52#

让我们考虑Ajay Nikam的假设,他希望在单个IIS站点的虚拟主机下托管多个独立的Angular应用程序。

  • example.com/admin
  • example.com/sales
  • example.com/inventory

为每个文件夹 adminsalesinventory 创建一个web.config文件,其中包含以下内容:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- Redirect HTTP request to HTTPS -->
        <rule name="HTTP to HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{REQUEST_URI}" appendQueryString="false" />
        </rule>
        <!-- Avoid 404 error when refreshing web application -->
        <rule name="Angular Catch All" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

字符串
对于每个文件夹 adminsalesinventory,调整index.html文件中标签的“href”属性值,如下所示(要自动调整,请参阅下面的提示):

  • 对于 admin 文件夹:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Example Admin</title>
        <base href="https://example.com/admin/">
    </head>
    <body>
        ...
    </body>
</html>

  • 对于 sales 文件夹:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Example Sales</title>
        <base href="https://example.com/sales/">
    </head>
    <body>
        ...
    </body>
</html>

  • 对于 inventory 文件夹:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Example Inventory</title>
        <base href="https://example.com/inventory/">
    </head>
    <body>
        ...
    </body>
</html>


提示:通过Angular项目(*package.json 中的scripts.build)自动化“base”标签的“href”属性:

{
  "name": "admin",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --base-href=https://example.com/admin/",
    ...
  }
}


另外,这里还有一个例子,它是从Angular项目的app-routing.module.ts文件中路由的,与 admin 相关:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { NotFoundComponent } from './core/components/not-found/component/not-found.component';
import { HomeComponent } from './modules/home/component/home.component';


const routes: Routes = [{
    path: 'home',
    component: HomeComponent
  },
  {
    path: 'not-found',
    component: NotFoundComponent
  },
  {
    path: '**',
    redirectTo: 'not-found'
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }


最后,将每个 adminsalesinventory 文件夹转换为IIS应用程序
完成以上步骤后,应该有一个IIS站点和三个IIS应用程序,每个IIS应用程序托管一个不同的Angular Web应用程序。每个应用程序将响应URL https://example.com/[admin|sales|inventory]
每个应用程序的路由将正常工作。

相关问题