如何将静态文件定义为Azure静态网站上的路由?

时间:2019-02-06 11:40:16

标签: azure web-config

我的用例是带有深层链接的静态天蓝色网站。我希望我的azure网站在调用某些URL时返回index.html页面。 / t / 2

在使用ASP.NET为应用程序提供服务时,可以通过将以下内容添加到Route中来实现此目的

routes.MapRoute(
            name: "DeepLink",
            url: "t/{*id}",
            defaults: new { controller = "Home", action = "Index" }
        );

我想通过静态站点实现相同的目标。我可以添加一个Web.config,该文件可用于重定向/重写我的URL,但我希望该URL保持为/ t / 2,以便前端可以对此做出反应。

4 个答案:

答案 0 :(得分:1)

遇到了同样的问题,偶然发现了这个线程-

由于静态网站只知道主要路线,因此不知道任何路线-对于任何基础路线,它将始终默认为未找到。

但是在SPA中,您没有静态的404文档,您的index.html将为您处理该文档。

因此,您唯一需要做的就是将index.html也指定为404文档,一切似乎都可以正常工作。

答案 1 :(得分:1)

使用404页面作为后备并不是路由链接的最佳方法。

您可以使用{。{3}}中所述的route.json文件。

如果需要,可以使用通配符。您的routes.json文件将如下所示:

{
   "route": "/t/2",
   "serve": "/index.html",
}

答案 2 :(得分:0)

如果您使用的是静态Web应用程序,则您无权访问任何服务器端代码来进行路由,则需要在所有客户端上进行。您将需要使用支持此功能的Javascript库或类似程序。

答案 3 :(得分:0)

如果您是在静态网站上指的是Azure Storage web sites,则可以指定一个自定义的404 html,该html可以提供一个小的JavaScript代码段,该代码段重定向回index.html(如Sam所指出的那样)。

如果静态网站位于Azure App Service中,则可以在web.config中添加此代码段:

<system.webServer>
    <rewrite>
      <rules>        
        <rule name="Main Rule" stopProcessing="true">
          <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>