Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IIS7和Vista上ASP.NET2的URL重写问题_Asp.net_Iis 7_Windows Vista_Url Rewriting - Fatal编程技术网

IIS7和Vista上ASP.NET2的URL重写问题

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未找

我有一个在ASP.NET2/IIS7/Vista下运行的网站。我有一个URL重写模块,它允许我拥有无扩展URL。为了实现这一点,我配置了配置文件的system.webServer部分,以便将所有请求转发到aspnet_isapi.dll。我还将URL重写模块添加到模块部分,并将runAllManagedModulesForAllRequests设置为true

当我启动网站并访问其中一个使用URL重写的页面时,该页面被正确呈现。然而,如果我再访问另一个页面,该网站将停止工作,我将得到一个404未找到。我还发现URL重写模块中的断点没有被击中。这几乎就像IIS将第一个请求转发给重写器,但随后的请求会转到其他地方——错误页面将通知称为MapRequestHandler,将处理程序称为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>

该站点在经典而非集成管道模式下运行


有人有什么想法吗?我怀疑我的配置在某个地方出错,但我似乎找不到正确的位置。

这有点遥不可及,但您是否尝试过在IIS内部进行配置更改


我知道web.config方式应该是100%万无一失的,但我已经看到了一些事情,在IIS中配置它可以帮助它正常工作。

您可能还想查看新的IIS7重写模块。您可以在这里阅读更多关于它的内容,但它可能会比您自己开发的ISAPI过滤器更加可靠。请尝试它支持所有Apache mod_重写语法,并且还支持反向代理

  • 如果您在经典管道模式下运行,则不需要
    部分,它是集成模式所必需的
  • 启用通配符脚本映射

  • 打开IIS7管理器并导航到您的站点

  • 单击处理程序映射

  • 在操作面板中,单击“添加通配符脚本映射”

  • 在对话框中,指向aspnet_isapi.dll

  • 在要求您确认映射的消息框中单击“是”

  • 在操作面板中,单击“查看有序列表”,并将通配符ScriptMap移动到StaticFile处理程序之前


  • 这应该足够了。

    我很惭愧地承认这一点,但我犯了一个简单的错误:-(

    在我的URL重写模块中,重写请求路径的代码位于Init方法中,而它本应位于Application.BeginRequest处理程序中。这解释了为什么只有在第一次访问站点时重写才起作用


    很抱歉浪费了您的时间,各位!有趣的是,您还有其他修改配置的内容吗?或者注册了任何其他全局处理程序吗?此应用程序是虚拟目录吗?好的,没有其他内容修改配置。代码运行的是网站而不是虚拟目录。我已经在问题中添加了一些配置示例本身。我在IIS 7.0中很难让通配符支持正常工作。您可能希望尝试在添加的处理程序之前添加一个权限,以确保在填充之前没有其他操作尝试运行。我尝试了此操作,但仍然遇到相同的问题。我还注意到,在使用IIS进行您建议的更改后,如果我使用back进入Visual Studio在配置文件中有一个新的部分。谢谢,但我需要我自己的重写器,因为我们的重写是非常自定义的。我也非常确信重写工作正常,只是静态文件请求不能正常工作。谢谢,但我需要我自己的重写器,因为我们的重写是非常自定义的。我也非常确信重写器工作正常ewriting工作正常,只是静态文件请求工作不正常。