我有一个在ASP .NET 2 / IIS7 / Vista下运行的网站。我有一个URL重写模块,允许我有无扩展名的URL。为了实现这一点,我配置了配置文件的system.webServer部分,以便将所有请求转发到aspnet_isapi.dll。我还将URL重写模块添加到模块部分,并将runAllManagedModulesForAllRequests设置为true。
当我启动网站并访问其中一个使用URL重写的页面时,页面会正确呈现。但是,如果我然后访问另一个页面,该网站将停止工作,我找不到404。我还发现我的URL重写模块中的断点没有被击中。这几乎就好像IIS将第一个请求转发给重写器,但后续转发到其他地方 - 错误页面提到Notification为MapRequestHandler和Handler为StaticFile。
如果我对web.config文件做了一些小改动并保存,触发网站重新启动,我就可以在浏览器中重新加载页面了,一切正常。然后我点击另一个链接再次破坏。
对于记录,这里有一些来自配置文件的片段。首先,在system.web下:
<httpModules>
<add name="UrlRewriteModule" type="Arcs.CoopFurniture.TelesalesWeb.UrlRewriteModule, Arcs.CoopFurniture.TelesalesWeb" />
</httpModules>
然后在system.webServer:
下<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriteModule" type="Arcs.CoopFurniture.TelesalesWeb.UrlRewriteModule, Arcs.CoopFurniture.TelesalesWeb" preCondition="managedHandler" />
</modules>
<handlers>
<add name="AspNet" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.web>
该网站在经典而非集成管道模式下运行。
有没有人有任何想法?我怀疑我的配置在某个地方是错的,但我似乎找不到。
答案 0 :(得分:0)
这是一个很长的镜头,但您是否尝试过实际在IIS中进行配置更改?
我知道web.config方式应该是100%万无一失,但我已经看到了一些在IIS中配置它以使其正常工作的帮助。
答案 1 :(得分:0)
您还可以查看新的IIS7重写模块。你可以在http://learn.iis.net/page.aspx/460/using-url-rewrite-module/阅读更多关于它的信息,但是它可能比你自己开发的ISAPI过滤器更加可靠
答案 2 :(得分:0)
尝试http://www.codeplex.com/urlrewriter它支持所有Apache mod_rewrite语法,并且还支持反向代理。
答案 3 :(得分:0)
<system.webServer>
部分,这是集成模式所必需的启用通配符脚本映射
打开IIS7管理器并导航到您的站点
点击处理程序映射
在“操作”面板中,单击“添加通配符脚本映射”
在对话框中指向aspnet_isapi.dll
在要求您确认映射的消息框中单击是
在操作面板中单击“查看有序列表”并在StaticFile处理程序之前移动您的WildcardScriptMap
这应该足够了。
答案 4 :(得分:0)
我很惭愧承认这一点,但这是我的一个简单错误: - (
在我的URL重写模块中,重写请求路径的代码是在Init方法中,当它应该在Application.BeginRequest处理程序中时。这解释了为什么重写仅在网站第一次被击中时起作用。
抱歉浪费了你的时间!