.net中带点的语义url

我正在尝试为search页面创build语义URL,但是如果有人使用完成点search,则.net引擎会返回404。

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

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

如果您使用.NET 4.0和IIS 7+,则可以在web.config的system.web部分中设置此标志,并允许:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

我已经testing过它,它工作。 哈克有一个解释。

一切后面的'。' 是文件扩展名。 如果该扩展没有映射到ASP.NET,它将不会被切换到ASP.NET处理程序。 IIS寻找一个静态文件。 因此,404.如果没有增加任何东西(很难看到它会如何),我build议把它剥离出来。

当后期不重要时(就像https://stackoverflow.com/questions/tagged/etc中的情况一样),你可以使用IIS的URL重写模块去除尾随句点。;

模式^(.*[^.])(\.+)$
重写url: {R:1}

这不会帮助,当扔掉时间不是一个选项,或者在中间path段的末尾有一段时间,但是对于通过自动链接algorithm处理期间的非常真实的使用情况它可以帮助。

看起来像IIS可能不知道如何处理与一个空的扩展名的请求。

右键单击该网站,然后select“属性”。 点击“主目录”选项卡上的“configuration…”。 看看“应用程序扩展”,并尝试添加一个空的或通配符的扩展。

在Windows中,文件名不能以'。'结尾。 我认为所有的问题源于此,即IIS不知道如何处理它,所以它不会达到ASP.NETerror handling程序,并得到默认IIS 404页面的处理。

大多数search引擎( 无论如何是谷歌 )排除标点符号查询,我认为你也应该。

编辑:它倒下了,因为它没有文件types,即使微软网站摔倒了看http://www.microsoft.com/en/us/fallover 。 但是你可以修改默认的错误文件(像C:\ WINDOWS \ help \ iisHelp \ common),或者完全改变它。

检查一下: configuration自定义错误消息(IIS 6.0)

你不应该像这样在查询string中进行确切的用户search…你应该UrlEncode它们。 这将解决问题。