我正在尝试为搜索页面创建语义网址,但如果有人使用点完成的搜索,.net引擎会返回404.
请求甚至没有到达路由引擎,所以我认为它与安全性或类似的东西有关。
例如,stackoverflow路由在这些情况下也不起作用: https://stackoverflow.com/questions/tagged/etc
答案 0 :(得分:24)
如果您使用的是.NET 4.0和IIS 7+,则可以在web.config的system.web部分设置此标志,并允许它:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
我测试了它并且它有效。 Haack对此进行了解释。
答案 1 :(得分:8)
'。'之后的一切。是文件扩展名。如果该扩展未映射到ASP.NET,则不会将其传递给ASP.NET处理程序。 IIS会查找静态文件。因此404.如果它没有添加任何东西(并且很难看出它会如何),我建议将其剥离。
答案 2 :(得分:1)
当尾随期间不重要时(如https://stackoverflow.com/questions/tagged/etc.的情况),您可以使用IIS的URL重写模块去除尾随期间。
模式:^(.*[^.])(\.+)$
重写网址 {R:1}
当丢弃句点不是一个选项,或者在中间路径段的末尾有句点时,这不会有帮助,但是对于处理通过auto添加到URL的句点的非常实际的用例 - 链接算法,它可以帮助。
答案 3 :(得分:0)
看起来IIS可能不知道如何处理具有空扩展名的请求。
右键单击网站,然后选择“属性”。 单击“主目录”选项卡上的“配置...”。 查看“Application Extensions”并尝试添加空或通配符扩展名。
答案 4 :(得分:-2)
在Windows中,文件名不能以'。'结尾。 我认为所有问题都源于那里,即IIS不知道如何处理它,因此它永远不会像ASP.NET错误处理程序那样得到默认IIS 404页面的处理。
大多数搜索引擎(well Google anyway)都会从查询中排除标点符号,我认为也应该这样。
编辑: 它会因为没有文件类型而崩溃,即使Microsoft网站看起来只有 http://www.microsoft.com/en/us/fallover。但你可以修改默认的错误文件(在C:\ WINDOWS \ help \ iisHelp \ common之类的地方生活)或者完全改变它。
答案 5 :(得分:-2)
你不应该在查询字符串中放置完全的用户搜索...你应该对它们进行UrlEncode。这将解决问题。