3

我刚刚从 IIS6 svr2003 迁移到 IIS7.5 服务器 2008r2 并安装了 url rewrite。这一切都很好。有问题的网站很大,并且在 .net 2 集成管道下运行。目前无法在 .net 4 中重做。我对此很陌生,在这里有点超出我的深度。我真的很想使用重写功能,但我也需要子应用程序才能工作。任何帮助,将不胜感激。

但是,来自外部供应商的子虚拟应用程序在 webconfig 的重写部分存在问题。我将其注释掉,子虚拟效果很好。我在网上查看并尝试了一些事情:

<location path="." inheritInChildApplications="false">

或者

<location path="." allowOverride="true" />

环绕重写模块给我:system.web 元素的子元素位置无效。

我在子虚拟应用程序的 webconfig 中的 system.web 下尝试过,但即使重写注释掉了 - 这会产生错误。我可以尝试删除,但想知道是否有人可以就这个问题给我一些见解。

这是基本的重写:

<rewrite>
  <rules>
    <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
      <match url="^sethsBrochure.pdf$" />
      <conditions>
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
      </conditions>
      <action type="Redirect" url="path/path/doc.pdf" appendQueryString="false" />
    </rule>
    <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
      <match url="^sethsBrochure$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="path/path/doc.pdf" />
    </rule>
  </rules>
  <outboundRules>
    <rule name="OutboundRewriteUserFriendlyURL1" preCondition="ResponseIsHtml1">
      <match filterByTags="A, Form, Img" pattern="^(.*)path/path/doc\.pdf$" />
      <action type="Rewrite" value="{R:1}/ path/path/doc" />
    </rule>
    <preConditions>
      <preCondition name="ResponseIsHtml1">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>
4

1 回答 1

0

如您所料,最简单的方法是在子应用程序中使用clearremove。例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <!-- Insert rules for this application (if any) **below** the "clear" -->
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

但是,正如您在网上找到的,您也可以使用location块来执行此操作。您尝试的问题是位置块需要在块之外system.webServer,而不是在块内。

您写道您尝试过:

<configuration>
    <system.webServer>
        <location path="." inheritInChildApplications="false">
            <rewrite>
            ...
            </rewrite>
        </location>
    <system.webServer>
<configuration>

相反,您需要这样做:

<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <rewrite>
            ...
            </rewrite>
        <system.webServer>
    </location>
<configuration>
于 2013-04-30T23:57:29.540 回答