IIS7和Vista上ASP.NET2的URL重写问题
我有一个在ASP.NET2/IIS7/Vista下运行的网站。我有一个URL重写模块,它允许我拥有无扩展URL。为了实现这一点,我配置了配置文件的system.webServer部分,以便将所有请求转发到aspnet_isapi.dll。我还将URL重写模块添加到模块部分,并将runAllManagedModulesForAllRequests设置为true 当我启动网站并访问其中一个使用URL重写的页面时,该页面被正确呈现。然而,如果我再访问另一个页面,该网站将停止工作,我将得到一个404未找到。我还发现URL重写模块中的断点没有被击中。这几乎就像IIS将第一个请求转发给重写器,但随后的请求会转到其他地方——错误页面将通知称为MapRequestHandler,将处理程序称为StaticFile 然后,如果我对web.config文件做了一个小的更改并保存它,触发网站重新启动,我就可以在浏览器中重新加载页面,一切正常。然后我点击另一个链接,它又断了 下面是配置文件中的几个片段。首先,在system.web下:IIS7和Vista上ASP.NET2的URL重写问题,asp.net,iis-7,windows-vista,url-rewriting,Asp.net,Iis 7,Windows Vista,Url Rewriting,我有一个在ASP.NET2/IIS7/Vista下运行的网站。我有一个URL重写模块,它允许我拥有无扩展URL。为了实现这一点,我配置了配置文件的system.webServer部分,以便将所有请求转发到aspnet_isapi.dll。我还将URL重写模块添加到模块部分,并将runAllManagedModulesForAllRequests设置为true 当我启动网站并访问其中一个使用URL重写的页面时,该页面被正确呈现。然而,如果我再访问另一个页面,该网站将停止工作,我将得到一个404未找
<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>
该站点在经典而非集成管道模式下运行
有人有什么想法吗?我怀疑我的配置在某个地方出错,但我似乎找不到正确的位置。这有点遥不可及,但您是否尝试过在IIS内部进行配置更改
我知道web.config方式应该是100%万无一失的,但我已经看到了一些事情,在IIS中配置它可以帮助它正常工作。您可能还想查看新的IIS7重写模块。您可以在这里阅读更多关于它的内容,但它可能会比您自己开发的ISAPI过滤器更加可靠。请尝试它支持所有Apache mod_重写语法,并且还支持反向代理
部分,它是集成模式所必需的这应该足够了。我很惭愧地承认这一点,但我犯了一个简单的错误:-( 在我的URL重写模块中,重写请求路径的代码位于Init方法中,而它本应位于Application.BeginRequest处理程序中。这解释了为什么只有在第一次访问站点时重写才起作用
很抱歉浪费了您的时间,各位!有趣的是,您还有其他修改配置的内容吗?或者注册了任何其他全局处理程序吗?此应用程序是虚拟目录吗?好的,没有其他内容修改配置。代码运行的是网站而不是虚拟目录。我已经在问题中添加了一些配置示例本身。我在IIS 7.0中很难让通配符支持正常工作。您可能希望尝试在添加的处理程序之前添加一个权限,以确保在填充之前没有其他操作尝试运行。我尝试了此操作,但仍然遇到相同的问题。我还注意到,在使用IIS进行您建议的更改后,如果我使用back进入Visual Studio在配置文件中有一个新的部分。谢谢,但我需要我自己的重写器,因为我们的重写是非常自定义的。我也非常确信重写工作正常,只是静态文件请求不能正常工作。谢谢,但我需要我自己的重写器,因为我们的重写是非常自定义的。我也非常确信重写器工作正常ewriting工作正常,只是静态文件请求工作不正常。