我们将 Intelligencia URLRewriting 模块用于带有 2.0 版框架和 IIS6 的 asp.net。我们的 URL 通常没有扩展名。
我知道如果没有通用通配符(这会导致其他问题),IIS6 无法真正处理这种情况。
但是,它有效!有时。在其他时候(例如,在一个开发人员的机器上,以及当我在应用程序上指向不同的虚拟目录时在我的机器上)它不会。“它不起作用”我的意思是配置的 HttpModules 甚至永远不会被命中。
谁能解释一下?
谢谢。
我们将 Intelligencia URLRewriting 模块用于带有 2.0 版框架和 IIS6 的 asp.net。我们的 URL 通常没有扩展名。
我知道如果没有通用通配符(这会导致其他问题),IIS6 无法真正处理这种情况。
但是,它有效!有时。在其他时候(例如,在一个开发人员的机器上,以及当我在应用程序上指向不同的虚拟目录时在我的机器上)它不会。“它不起作用”我的意思是配置的 HttpModules 甚至永远不会被命中。
谁能解释一下?
谢谢。
所以事实证明发生了以下事情:
所以我们得到一个重定向进入 asp.net 的行:
http://website/error.aspx?404;http://website/products/productid
我们的 URLRewriting 正则表达式现在设置为丢弃 error.aspx 位并处理http://website/products/productid就好像它是实际的 URL
我想这可能证明对某人有用,但我们正在转向 isapi 过滤器。一个提醒是,默认情况下这将导致重定向的紧密循环!
如果您使用 Visual Studio 开发 Web 服务器运行站点,所有请求都将由 asp.net 处理,因此您的 HttpModule 将运行。
在 IIS6 上,除非设置为将请求转发到 asp.net,否则不会发生这种情况。
您确定当“它有效”时您没有在 VS.NET 中包含的 Cassini 开发 Web 服务器下运行?因为无扩展通配符在 Cassini 下确实有效,这至少可以说是非常令人困惑的。
如果您在 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>