我已将apple-app-site-association
文件添加到网站的根目录,但IIS未提供该文件。
使服务器在没有文件扩展名的情况下提供此特定文件的最佳方法是什么? web.config中有没有办法明确说“提供此文件”?
答案 0 :(得分:18)
我遇到了同样的问题,发现了这个惊人的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>
答案 1 :(得分:2)
不是我首选的解决方案,但在DeyaEldeen的评论中,我满足了我们的许多需求的方式是使用元标记方法(在页面的<head>
标记内):< / p>
<meta name="apple-itunes-app" content="app-id=5555555555">
这使得当iOS上的任何用户浏览到该网站时,他们会在应用商店中看到&#34;视图&#34;弹出页面顶部。一旦他们按下弹出窗口,他们就会被定向到应用程序商店。
请参阅Apple's docs for Smart App Banners。
希望这可以帮助一些有类似需求的人。
答案 2 :(得分:1)
如this answer所述,出于安全原因,IIS 仅提供已知文件类型,并使用文件扩展名来推断文件类型。您可以为无扩展名的文件声明文件类型,以允许为它们提供服务。
但这会导致服务器提供任何无扩展名的文件,这可能导致意外文件被提供给任何人,包括机器人探测未正确保护的敏感文件。
之前链接的 answer 解释的解决方案可以仅限于该苹果文件。最好限制一下。为此使用 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>
答案 3 :(得分:0)
出于安全原因,IIS不允许浏览任何文件。成像,例如web.config
。
最快的方法是通过扩展名将文件类型添加到已知类型:
Open IIS Manager -> Sites -> Your Web Site -> MIME TYPES -> Add...
File name extension=.
MIME type=application/json
-> OK
现在可以了。