Hash Durandal JS:键入不带哈希的url时出现HTTP错误404.0-未找到

Hash Durandal JS:键入不带哈希的url时出现HTTP错误404.0-未找到,hash,http-status-code-404,durandal,Hash,Http Status Code 404,Durandal,我正在使用Durandaljs构建一个SPA应用程序。当我输入一个没有散列的URL时,它会显示错误:HTTP错误404.0-找不到。但是,使用散列可以正常工作 例如: www.domain.com/page => HTTP error 404.0 - NOT FOUND www.domain.com/#page = > working fine. 我如何将www.domain.com/page映射到www.domain.com/#page?你可以,我正在基于模板的最新Durand

我正在使用Durandaljs构建一个SPA应用程序。当我输入一个没有散列的URL时,它会显示错误:
HTTP错误404.0-找不到。
但是,使用散列可以正常工作

例如:

www.domain.com/page =>  HTTP error 404.0 - NOT FOUND
www.domain.com/#page = > working fine.

我如何将
www.domain.com/page
映射到
www.domain.com/#page

你可以,我正在基于模板的最新Durandal网站上使用它

初始化路由器时,设置
pushState:true
,如下所示:

returnrouter.map([
{route:'somroute',moduleId:'somroute',title:'Home',nav:true,哈希:“#somroute”}
])
.buildNavigationModel()
.mapUnknownRoutes(“未找到”、“未找到”)
.activate({pushState:true});

您可以在我的网站上看到一个工作示例:

为了让
pushState
在您的应用程序中正常工作(包括深度链接),您必须为pushState配置路由器,并告诉服务器忽略除某些路径外的所有路径/路由

服务器应忽略包含SPA使用的资源或服务的路径,并应始终为这些被忽略的路由发送
Durandal.cshtml
(或您命名的任何内容)

即使请求中有其他路由信息,也应忽略这些路由。这将允许使用pushState样式的URL进行深度链接

以下是我最近完成的基于Durandal的应用程序的MVC路由:

publicstaticvoidregisterOutes(路由收集路由){
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
忽略(“{resourcedir}/{*resource}”,
新的{resourcedir=@“(api | breeze | app | scripts | content | assets | signar)”;
routes.MapRoute(
名称:“默认”,
url:“{*sparoute}”,
默认值:新建{controller=“Durandal”,action=“Index”});
}
基本上,我们告诉服务器忽略以以下开头的任何请求:

  • 原料药/
  • 微风/
  • 应用程序/
  • 剧本/
  • 内容/
  • 资产/
  • 信号员/
我们忽略了
api
breeze
singlar
,因为WEBApi和signar将处理这些请求。此外,
应用程序
脚本
内容
、和
资产
也被忽略,因为底层ASP.NET引擎将为这些请求提供服务

最后一条语句(
routes.MapRoute
)导致所有未被忽略的请求发回默认页面(SPA中唯一的真实页面)

例如,
www.domain.com/page
将从服务器发送与请求
www.domain.com/
相同的响应。一旦SPA加载并且Durandal的
路由器/历史
初始化后,如果需要,后缀将转换为散列(就像您正在使用IE),然后通过路由器发送

请注意,如果应用程序的根目录不是
/
,则需要指定根路径。您还应该包括
hashChange:true
,以便您的应用程序在IE中工作,如下所示:

router.activate({pushState:true,hashChange:true,root:'/approt'})

您在服务器端使用什么设置?我试过了,我的客户现在被“route not found”错误打断了。我现在没有可用的源代码,但请查看我链接到的模板,你应该可以看到他在那里做什么。