使用自定义URL重写器,IIS6和带.htm,.html等的URL

我有一个自定义网站,我正在建立自动url重写使用自定义引擎。 只要页面url没有像.htm或.html那样结束,重写就可以正常工作。 对于这些页面,它直接进入iis 404页面,而不是首先点击我的重写引擎。

我在该网站的IIS6配置的“主目录”部分中有*通配符处理程序,但这些URL似乎被它忽略(如css,jpg,js等等,以便发送到我的网站中的url处理程序)项目)。 我如何设置IIS6强制这些url被发送到处理程序,如果它仍然正常存在,仍然提供页面?

处理程序基本上这样做

if (!File.Exists(Request.Path)) { doMyRewriting(); } 

我必须假设使用这样的块(只是和示例,真正的一个做一些其他的东西来格式化Request.Path以适应所有事情)应该运行“doMyRewriting()”如果请求的文件不存在否则它会正常地为页面提供服务。 我错了吗?

如果我特意告诉IIS将.htm和.html页面发送到.NET处理程序,则重写会起作用,但如果页面实际存在则不会提供它。

任何帮助将不胜感激。

提前致谢!

不知道你是否可以或者想要这样做,但是你可以使用Ionics Isapiurl重写器。

http://www.codeplex.com/IIRF

基本上安装,然后设置一个规则来删除.html它会击中你的重写引擎。 我在IIS 6上使用它和我的几个博客。

我想如果你让IIS发送所有请求到.NET和你的处理程序,那么你的处理程序将需要检测页面是否存在并提供它而不是重写。

UrlRewriting.NET有一个选项可以执行此操作 – 您可能希望查看他们的代码以了解他们如何处理此案例。

在我看来,用IIS 6重写URL最好用ISAPIfilter编写为非托管本机代码。 否则,你会遇到你提到的问题 – 必须将所有扩展映射到ASP.Net并失去简单文件处理的能力。 使用ISAPI筛选器,您可以选择不重写某些URL并让IIS正常处理它们。

首先,我建议您阅读MSDN上的ISAPIfilter概述 。

如果您的filter绝对需要.Net框架运行时,则可以编写一个承载CLR的小型ISAPIfiltershell,并将请求转发给某些托管代码。 Filter.Net Framework采用这种方法,可能适合您的需求。 这种方法有一个小缺点,因为您必须使用与主IIS进程中运行的任何ASP.Net应用程序相同的.Net版本。