在AngularJs的SPA中,我如何删除“;.html”;来自我的URL

In AngularJs SPA how do I remove the ".html" from my URL

本文关键字:html URL 我的 自我 删除 SPA AngularJs 何删除      更新时间:2023-09-26

我已经对此进行了一段时间的研究,遇到了一些类似的堆叠式讨论,但没有一个能让我满意地回答这个问题。我不确定angularjs是否有办法做到这一点,但我相信在编写angularjsSPA应用程序时有办法做到。我的情况是这样的,

我正在为现有的基于ASP.NET MVC的应用程序编写AngularJs前端。当前应用程序中的URL看起来像

https://domain.com/login
https://domain.com/profile
https://domain.com/settings

etc

我的新前端版本读取

https://domain.com/index.html/login
https://domain.com/index.html/profile
https://domain.com/index.html/settings

我需要的问题是

我需要从新的url中删除.html。这是我的第一个障碍。以后我需要做的一切都取决于我的URL的读取方式。它需要以ASP.NET MVC提供的格式读取。url中没有.html文件扩展名的url。

当我用谷歌搜索关键词"angularjs url remove html and#!"的建议时

我得到的前两个结果是

如何从网站上基于angularjs 的url中删除index.html

从AngularJS urls(#symbol)中删除片段标识符

这些都无助于解决我的处境。

如果没有更好的方法,我正在考虑一种变通方法,那就是

"由于Index.html是我的ng视图所在的地方,而且这个页面基本上驱动了我的SPA架构,所以我可以对我的IIS进行操作,并将Index.html设置为默认文档。"这在一定程度上帮助我实现了我想要的(而不是在URL中显示".html")。例如(在本地工作时),如果我导航到http://localhost,它将打开index.html,而URL中没有显示文件名,并且只要我不刷新或复制粘贴这些URL(其中没有index.html),angularJs路由仍然可以正常工作,在这种情况下,我会出现404个错误(当我使用$locationProvider.html5Mode(true)删除#s时)。

这肯定不是理想的解决方案,因为当系统向用户发送访问应用程序某些部分所需的URL时,我们总是需要在其中包含index.html(我们不希望)

任何帮助,不胜感激。谢谢

这是服务器端的问题,而不是客户端的问题。您必须这样处理来自服务器端的请求:

handle '/'
    return view 'index.html'

然后,当您访问https://domain.com/时,您将看到index.html文件,但它在url中不可见。

编辑

如果你使用angular的html5模式,那么你应该做更复杂的路由,比如这样:

handle '/'
handle '/login'
handle '/profile'
handle '/settings'
    return view 'index.html'

因为例如您在url上:https://domain.com/profile并且你刷新了页面,请求会发送到这个url,所以你也应该处理'/profile'路由并返回相同的index.html页面(然后angularjs会负责路由)

如果您使用的是hash(#),那么当您刷新时https://domain.com/#/profile页面,请求将发送到https://domain.com/并且CCD_ 6路由处理程序将足够

您可以在web.config中编写URL重写规则:

    <rewrite>
      <rules>
        <rule name="Registration" stopProcessing="true">
          <match url="^Registration"/>
          <action type="Rewrite" url="/registration.html"/>
        </rule>
      </rules>
    </rewrite>