带有点在.net中的语义网址

时间:2008-11-16 22:31:33

标签: .net iis routing

我正在尝试为搜索页面创建语义网址,但如果有人使用点完成的搜索,.net引擎会返回404.

请求甚至没有到达路由引擎,所以我认为它与安全性或类似的东西有关。

例如,stackoverflow路由在这些情况下也不起作用: https://stackoverflow.com/questions/tagged/etc

6 个答案:

答案 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之类的地方生活)或者完全改变它。

检查一下:Configuring Custom Error Messages (IIS 6.0)

答案 5 :(得分:-2)

你不应该在查询字符串中放置完全的用户搜索...你应该对它们进行UrlEncode。这将解决问题。