【问题标题】:Preventing Angular from running when accessing static files with no extension访问没有扩展名的静态文件时防止 Angular 运行
【发布时间】:2022-05-07 23:08:00
【问题描述】:

我有一个用于项目的 Ionic/Angular PWA,它有一个本地 (Ionic Cordova) 应用程序以及移动设备。在应用程序上,我们需要接受与 PWA 具有相同 URL 的深层链接(这样您就可以使用相同的链接从 PC 和移动设备访问)。

要使 iOS 深层链接(他们称之为“通用链接”)正常工作,TLD 需要在根文件夹或 .well-known 路径内提供一些名为 apple-app-site-association(无扩展名)的文件。 Android 也是如此,但有一个名为 assetlinks.json 的文件(尽管在这种情况下,它并不是真正需要它工作,它只是为了遵守一些 Android 准则)。

问题是,当我尝试访问 iOS 文件时,我的 PWA 打开并将其捕获为路由并重定向到主页。不过,对于 Android 文件,它运行良好,因为它具有扩展名,并且 Angular(或托管服务器)识别出浏览器想要访问某个静态文件。

我在整个互联网上查找了这个问题,但找不到任何解决方案......

该网站托管在 IIS 服务器上,我已尝试对 web.config 文件进行一些设置修复,例如将路径重写为具有 .json 扩展名的相同文件和另一个我似乎不记得正确的文件现在。

对于src/app-routing.module.ts 文件中的路由,我也尝试了所有我能想到的组合。如果存在通配符路由,它将被匹配并重定向到指定的任何位置。如果没有,我会收到Error: Cannot match any routes. URL Segment: '.well-known/apple-app-site-association'

【问题讨论】:

  • 嘿@user8738866,这个有什么更新吗?你解决了吗?

标签: angular ionic-framework iis progressive-web-apps


【解决方案1】:

如果您阅读了通用链接,您将了解到这个概念是:您的应用的托管站点提供 apple-app-site-association 以将 url 连接到你的 iOS 应用。为静态网站设置这个很简单。但对于 Spa 应用程序来说,这可能非常困难。例如,使用 Angular,很容易通过 angular.json 配置静态内容。但是,当该静态内容没有文件扩展名时,它不再起作用?(被转发到 Angular 路由,这不是您想要的)。

因此,对于 Spa,您真正需要做的是在您的应用程序前面设置一些额外的基础设施。这个额外的 universal-link 基础设施只是一个使用与您的应用程序 url 不同的 url 访问的最小网站。

通用链接网址是您向用户群宣传的内容。当访问通用链接站点时,如果用户在移动设备上,则将 apple-app-site-associations 文件返回到设备并用于打开关联的原生应用程序。如果用户不在移动设备上,则会打开为通用链接配置的网络应用程序。

我在这里包括一个简单的说明。此解释并非旨在详尽无遗,而是为您(已陷入困境的人)指明正确的方向。图中的用例是通用链接的 Firebase 实现 -- 动态链接

一些很好的通用链接资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多