我已经创建了一个httpModule来处理URL重映射,它在我的测试系统上运行良好。 www.mydomain.com/Some_Fancy_URL
的请求会被重写为www.mydomain.com/some.aspx?fancy=23
,依此类推。
当我部署到实际网站时,我正在获取默认的IIS 404页面。
在线进行一些研究之后,似乎我需要在IIS 6中设置“通配符映射”以通过IIS和我的httpModule获取请求。问题是该站点托管在共享服务器上,因此可能无法让ISP进行更改。
我的问题是,我不能使用httpHandler告诉IIS我希望如何处理这些请求?例如:
<httpHandlers>
<add path="*.aspx" verb="GET,POST" type="System.Web.UI.PageHandlerFactory" validate="false"/>
</httpHandlers>
似乎将此添加到我的Web.Config应该告诉IIS停止验证.aspx文件的存在,并且只是传递请求以便我处理。但它不起作用。
有什么建议吗?
答案 0 :(得分:2)
IIS 6和ASP.NET的问题在于它们没有集成。需要通过脚本映射(.aspx,.asmx,通配符等)告知IIS。
您的web.config
配置设置都不会影响IIS,因为web.config
用于配置ASP.NET的行为,而不是IIS。 IIS不了解web.config
。
除非您可以将请求移交给ASP.NET管道(通过脚本映射),否则不会发生任何事情,并且您的所有web.config
设置都将被忽略。
使用IIS 7,故事情况完全不同。在IIS7中,ASP.NET和IIS紧密集成并共享相同的管道,从而允许您实现您正在寻找的结果。
另一种方法可能是找出您的托管服务商是否在其服务器上运行URL重写器(如ISAPI_Rewrite)。这样您就可以重写URL而无需将通配符脚本映射到IIS6。
答案 1 :(得分:1)
通过一些试验和错误,以及更多的网络搜索,我找到了一个解决方案。它基本上与Kev的答案相似。
IIS不会将请求视为.NET,除非它具有已知的文件扩展名(.aspx,.ascx等)。当我发送类似www.mydomain.com/anything
之类的内容时,它会查找名为“nothing”的文件或文件夹,当它找不到时,它就会脱落到默认的IIS 404处理程序。
这就是我接手的地方。我更改了IIS 6以将404问题转发到/404.aspx
。然后,我创建了一个通用的“找不到你的文件”消息的页面,其格式与我的网站相同。
以下是好消息:现在IIS正在向.NET页面发送404,我创建的自定义httpModule 被触发。该请求适用于404.aspx,但IIS也很好,也可以附加原始URL。你会得到类似的东西:
www.mydomain.com/404.aspx?404;http://www.mydomain.com/anything
这允许我在httpModule中解析请求,并根据需要重写!