我们正在使用带有2.0版框架和IIS6的asp.net的Intelligencia URLRewriting模块。我们的网址通常没有扩展名。
据我所知,如果没有毯子通配符(导致其他问题),IIS6无法真正处理这种情况。
但是,它有效!有时。在其他时候(例如在一台开发者的机器上,当我在应用程序上指向另一个虚拟目录时,在我的机器上)它没有。通过“它不起作用”我的意思是配置的HttpModules永远不会被击中。
任何人都能解释一下吗?
感谢。
答案 0 :(得分:4)
事实证明发生的事情如下:
所以我们按照以下方式进入asp.net重定向:
http://website/error.aspx?404;http://website/products/productid
我们的URLRewriting正则表达式现在设置为这样,它们丢弃了error.aspx位并处理http://website/products/productid,好像它是实际的URL
我想这对某人来说可能是一个有用的方法,但我们正在转向isapi过滤器。一个单挑是默认情况下会导致重定向的紧密循环!
答案 1 :(得分:2)
如果您使用Visual Studio开发Web服务器运行站点,则所有请求都将由asp.net处理,因此您的HttpModule将运行。
在IIS6上,除非将其设置为将请求转发到asp.net,否则不应该发生这种情况。
答案 2 :(得分:1)
你确定当它“工作”时你没有在VS.NET中包含的Cassini开发Web服务器下运行吗?因为无扩展的通配符在Cassini下工作,至少可以说是非常混乱。
答案 3 :(得分:-2)
如果您使用的是带有ASP.net 4.0的IIS6,则必须指定并注册模块,如下所示:
<system.web>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
不是
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</modules>