我正在尝试为搜索页面制作语义 url,但如果有人使用点中完成的搜索,.net 引擎会返回 404。
该请求甚至没有到达路由引擎,所以我认为它与安全或类似的东西有关。
例如,stackoverflow 路由在这些情况下也不起作用: https://stackoverflow.com/questions/tagged/etc。
我正在尝试为搜索页面制作语义 url,但如果有人使用点中完成的搜索,.net 引擎会返回 404。
该请求甚至没有到达路由引擎,所以我认为它与安全或类似的东西有关。
例如,stackoverflow 路由在这些情况下也不起作用: https://stackoverflow.com/questions/tagged/etc。
如果您使用的是 .NET 4.0 和 IIS 7+,您可以在 web.config 的 system.web 部分设置此标志,并且允许:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
我已经对其进行了测试,并且可以正常工作。哈克对此进行了解释。
'.' 之后的所有内容 是文件扩展名。如果该扩展没有映射到 ASP.NET,它就不会被移交给 ASP.NET 处理程序。IIS 改为查找静态文件。因此是 404。如果它没有添加任何东西(而且很难看出它会如何),我建议将其剥离。
当尾随句点不重要时(如https://stackoverflow.com/questions/tagged/etc.的情况),您可以使用 IIS 的 URL 重写模块来去除尾随句点。
模式:^(.*[^.])(\.+)$
重写 URL: {R:1}
当丢弃句点不是一种选择时,这将无济于事,或者在中间路径段的末尾有句点,但对于处理通过自动链接算法附加到 URL 的句点的非常真实的用例它可以提供帮助。
看起来 IIS 可能不知道如何处理带有空扩展名的请求。
右键单击该网站并选择“属性”。单击“主目录”选项卡上的“配置...”。查看“应用程序扩展”并尝试添加空扩展名或通配符扩展名。
在 Windows 中,文件名不能以“.”结尾 我认为所有问题都源于那里,即 IIS 不知道如何处理它,因此它永远不会到达 ASP.NET 错误处理程序并通过默认 IIS 404 页面获取句柄。
大多数搜索引擎(无论如何都是谷歌)从查询中排除标点符号,我认为你的也应该这样做。
编辑:它因为没有文件类型而崩溃,甚至微软网站也崩溃了http://www.microsoft.com/en/us/fallover。但您可以修改默认错误文件(位于 C:\WINDOWS\help\iisHelp\common 之类的位置)或完全更改它。
看看这个:配置自定义错误消息 (IIS 6.0)
您不应该将精确的用户搜索放在这样的查询字符串中......您应该对它们进行 UrlEncode。这将解决问题。