IIS下提供的Vue.js无法找到资产文件

IIS下提供的Vue.js无法找到资产文件,iis,vue.js,Iis,Vue.js,更新 进一步挖掘之后,我认为问题与以下事实有关:引用CSS文件等资产,例如href=“/CSS/style.CSS”IIS将通过导航到服务器的根文件夹,而不是应用程序的根文件夹,例如localhost/myapp/CSS/style.CSS,来解决此问题。然而,这似乎只有在运行Vue应用程序时才会发生,当我在自己的应用程序中“部署”原始html文件时,CSS和JS文件路径被正确解析 原创帖子 我用Vue路由器在Vue.js中开发了一个示例待办应用程序。当使用VUE CLI提供服务时,它会按预期工

更新

进一步挖掘之后,我认为问题与以下事实有关:引用CSS文件等资产,例如href=“/CSS/style.CSS”IIS将通过导航到服务器的根文件夹,而不是应用程序的根文件夹,例如localhost/myapp/CSS/style.CSS,来解决此问题。然而,这似乎只有在运行Vue应用程序时才会发生,当我在自己的应用程序中“部署”原始html文件时,CSS和JS文件路径被正确解析

原创帖子

我用Vue路由器在Vue.js中开发了一个示例待办应用程序。当使用VUE CLI提供服务时,它会按预期工作,但是当我从IIS应用程序下的dist文件夹中构建并放置文件时,会出现错误,表明服务器尝试在localhost根目录而不是localhost/todos中查找资产文件(如css和js)。错误示例:

 http://localhost/css/app.45a2082d.css net::ERR_ABORTED 404 (Not Found)
 http://localhost/js/app.34c2e8cc.js net::ERR_ABORTED 404 (Not Found)
我遵循了官方网站上指定的IIS步骤,即安装了IIS URLRewite并包含了web.config,但是我得到了相同的结果。包括web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Handle History Mode and custom 404/500" 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="/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
当通过IIS Express启动时,它会按预期工作,即加载index.html文件,而index.html文件又会正确加载所有其他资产。这些路由工作正常,因为我能够在页面/路由(主页和关于)之间切换。但是,当我发布此web应用程序并使用更新的web.config文件(前面提到的URL重写规则+特定于.Net核心的配置)将其置于IIS下时,我遇到了相同的问题-IIS似乎尝试从根本地主机位置加载资产

我如何告诉IIS在应用程序的根位置(即iinetpub\wwwroot\Todos)而不是本地主机的根位置查找资产文件

我构建的dist文件和目录如下所示:

  • index.html
  • css/app.45a2082d.css
  • js/app.34c2e8cc.js
vue路由器配置:

export default new Router({
    mode: "history",
    routes: [
        {
            path: "/",
            name: "home",
            component: Home
        },
        {
            path: "/about",
            name: "about",
            component: About
        }
    ]
});

IIS配置中是否缺少其他内容?为什么它可以在IIS Express下工作,但不能在系统的IIS下工作?问题出在其他地方了吗?

事实证明,我必须配置Vue来设置baseUrl并匹配应用程序的路径。在vue.config.js中:

module.exports = {
    baseUrl: '/todos'
};
module.exports = {
    baseUrl: '/todos'
};