什么 web.config 设置将允许提供 apple-app-site-association?

What web.config setting will allow apple-app-site-association to be served?

我已将 apple-app-site-association 文件添加到网站的根目录,但 IIS 未传送该文件。

让服务器为这个没有文件扩展名的特定文件提供服务的最佳方法是什么?在 web.config 中有没有办法明确地说 "serve this file"?

不是我的首选解决方案,但在 DeyaEldeen 的评论中,我满足我们许多需求的方式是改用元标记方法(在页面的 <head> 标记内):

<meta name="apple-itunes-app" content="app-id=5555555555">

这样一来,每当 iOS 上的任何用户浏览该站点时,他们都会在页面顶部看到一个 "view in app store" 弹出窗口。一旦他们按下弹出窗口,他们就会被定向到应用商店。

Apple's docs for Smart App Banners

希望这对有类似需求的人有所帮助。

我遇到了同样的问题,发现这很神奇 post:

从 IIS 提供 apple-app-site-association IIS 仅提供由文件扩展名定义的已知类型的文件。由于 apple-app-site-association 不包含文件扩展名,因此当我尝试使用浏览器打开它时,IIS 会抛出 404 错误。我通过在 web.config 文件中添加一个 mimeMap 来解决这个问题:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <!-- required for apple-app-site-association: -->
      <mimeMap fileExtension="." mimeType="application/json" />
    </staticContent>
  </system.webServer>
</configuration>

为什么

出于安全原因,IIS 不允许浏览任何文件。成像,例如web.config.

如何

最快的方法是通过扩展名将文件类型添加到已知类型中:

Open IIS Manager -> Sites -> Your Web Site -> MIME TYPES -> Add...
    File name extension=.
    MIME type=application/json
-> OK

现在可以了。

所述,出于安全原因,IIS 仅提供已知文件类型,并使用文件扩展名来推断文件类型。您可以为无扩展名文件声明文件类型,以允许提供它们。

但这会导致服务器提供任何无扩展名的文件,这可能会导致意外文件被提供给任何人,包括机器人探测未正确保护的敏感文件。

之前链接解释的解决方案可以仅限于那个苹果文件。最好限制一下。为此使用 location 节点。
顺便说一句,如果您的默认设置不合适,请考虑调整此文件的缓存策略,尤其是当您的服务器位于 CDN 后面时。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  ...

  <location path="apple-app-site-association">
    <system.webServer>
      <staticContent>
        <mimeMap fileExtension="." mimeType="application/json" />
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="08:00:00" cacheControlCustom="public" />
      </staticContent>
    </system.webServer>
  </location>

  ...

</configuration>