【问题标题】:Angular deploy-url assets pathAngular 部署 URL 资产路径
【发布时间】:2019-04-07 09:36:19
【问题描述】:

大家可能都知道,在将 Angular 部署到根目录以外的路径时,资产路径存在问题:模板或样式表中存在的任何“/assets”路径都不会以部署路径为前缀。

我想编写一个 IIS 重写规则,检查我的部署路径中是否存在 /assets/... 路径,如果存在,则相应地重写 url。例如,假设我在/assets/1.jpg 有一个资产,我的部署 url 是/ui/ 我想要一个接受请求 URI 的重写规则,在它前面加上 /ui 检查它是否是一个实际的文件系统文件,如果是这样, 将请求 uri 重写为/ui/assets/1.jpg

我尝试了以下方法,但我知道这不起作用:

<rule name="angular asset" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="/ui/{REQUEST_URI}" matchType="IsFile" />
    </conditions>
    <action type="Rewrite" url="/ui/{R:1}" />
</rule>

写这样一条规则的正确方法是什么?

澄清我希望重写规则适用于任何前缀路径,而不仅仅是/assets

【问题讨论】:

  • 设置APP_BASE_HREF 不起作用吗?
  • 不,这不是解决方案,我希望应用程序基于根目录'/'。

标签: angular iis url-rewriting


【解决方案1】:

使用 deploy-url 选项构建 Angular 应用,如下所示:

ng b --deploy-url /ui/

接下来在 IIS 下发布您的应用程序和主机

尝试更新重写规则如下

<rule name="angular asset" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_URI}" pattern="(.*)"/>
    </conditions>
    <action type="Rewrite" url="/ui/{R:1}" />
</rule>

【讨论】:

  • 您是否在 MVC 应用程序中托管 Angular 应用程序?另外,当您在浏览器中加载 Angular 应用程序时,main.bundle.js 文件是否成功加载?
  • 是的,一切正常,唯一的问题是/assets/... 路径。我还想提一下,我是 Angular 的老手,所以 Angular 不是这里的问题。 IIS 重写规则是。
  • @AviadP。在答案中尝试更新的 url-rewrite 规则
  • 这可以工作,但仅限于/assets 路径我希望它适用于任何路径...我要澄清我的问题
  • 这是行不通的,因为{REQUEST_URI} 从来都不是文件,因为它采用/assets/... 的形式,而文件仅采用完整文件系统路径名的形式,如果有的话{REQUEST_FILENAME}是我们追求的东西,但是我们不能在它中间注入基本路径。或者至少这就是我在我的问题中所要求的。
猜你喜欢
  • 2018-02-21
  • 2020-12-06
  • 2018-10-05
  • 2012-02-07
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多