Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自定义URL重写器、IIS6和带有.htm、.html等的URL_C#_.net 3.5_Iis 6_Url Rewriting_Windows Server 2003 - Fatal编程技术网

C# 使用自定义URL重写器、IIS6和带有.htm、.html等的URL

C# 使用自定义URL重写器、IIS6和带有.htm、.html等的URL,c#,.net-3.5,iis-6,url-rewriting,windows-server-2003,C#,.net 3.5,Iis 6,Url Rewriting,Windows Server 2003,我有一个自定义网站,我正在使用自定义引擎自动重写url。只要页面url不是以.htm或.html之类的内容结尾,重写就可以正常工作。对于这些页面,它直接转到IIS404页面,而不是先点击我的重写引擎 我在该网站IIS6配置的“主目录”部分有*通配符处理程序,但这些url似乎被它忽略了(还有一些东西,比如css、jpg、js等,被发送到我的web项目中的url处理程序)。如何设置IIS6以强制将这些URL发送到处理程序,同时仍然为页面提供服务(如果页面正常存在) 处理程序基本上就是这样做的 if

我有一个自定义网站,我正在使用自定义引擎自动重写url。只要页面url不是以.htm或.html之类的内容结尾,重写就可以正常工作。对于这些页面,它直接转到IIS404页面,而不是先点击我的重写引擎

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

处理程序基本上就是这样做的

if (!File.Exists(Request.Path))
{
    doMyRewriting();
}
我必须假设,如果请求的文件不存在,那么使用这样的块(例如,真实的块会执行一些其他操作来格式化请求。路径要适合所有内容)应该运行“doMyRewriting()”,否则它将正常地为页面服务。我弄错了吗

如果我特别告诉IIS通过.NET处理程序发送.htm和.html页面,重写会起作用,但如果页面确实在那里,则不会提供服务

任何帮助都将不胜感激


提前谢谢

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


UrlRewriting.NET有一个选项可以做到这一点-您可能希望查看他们的代码,看看他们是如何处理这种情况的。

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


UrlRewriting.NET有一个选项可以做到这一点——你可能想看看他们的代码,看看他们是如何处理这一情况的。

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


基本上,安装它,然后设置一个规则来删除.html,这样它就会命中重写引擎。我在IIS 6上的一些博客中使用了它。

不知道您是否可以或想要这样做,但您可以使用Ionics Isapi url重写器


基本上,安装它,然后设置一个规则来删除.html,这样它就会命中重写引擎。我在IIS 6上的一些博客中使用了它。

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

首先,我建议阅读MSDN上的


如果您的筛选器绝对需要.Net framework运行时,则可以编写一个小型ISAPI筛选器外壳来承载CLR并将请求转发给某些托管代码。采用这种方法,可能适合您的需要。这种方法有一个小缺点,即您必须使用与在主IIS进程中运行的任何ASP.Net应用程序相同的.Net版本。

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

首先,我建议阅读MSDN上的


如果您的筛选器绝对需要.Net framework运行时,则可以编写一个小型ISAPI筛选器外壳来承载CLR并将请求转发给某些托管代码。采用这种方法,可能适合您的需要。这种方法有一个小缺点,就是您必须使用与在主IIS进程中运行的任何ASP.Net应用程序相同的.Net版本。

我刚才查看了UrlRewriting.Net,在执行任何重写之前,他们检查文件是否存在的实际位正在执行上面引用的相同操作。我假设(我知道这很糟糕)如果没有触发重写器,IIS应该接管。我只是查看了UrlRewriting.NET,在执行任何重写之前,他们检查文件是否存在的实际位正在执行上面引用的相同操作。我假设(我知道这很糟糕)如果没有触发重写器,IIS应该接管。如果我没有需要提供的实际.htm或.html文件,这也会起作用,但不幸的是,情况并非如此。不是这样。使用IIRF并不意味着不能提供.htm或.html文件。你可以使用IIRF提供任何服务。如果我没有需要提供的实际.htm或.html文件,这也会起作用,但是,不幸的是,情况并非如此。不是这样。使用IIRF并不意味着不能提供.htm或.html文件。你可以用IIRF提供任何东西。