【问题标题】:ASP.NET / IIS7 Url Rewrite maps not workingASP.NET / IIS7 Url 重写映射不起作用
【发布时间】:2014-03-14 18:41:15
【问题描述】:

我已按照说明 Learn IIS's webpage 为我的 asp.net 应用程序添加带有重写映射的静态重定向。

以下是配置:

<rule name="Redirect rule1 for Information" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

<rewriteMaps>
    <rewriteMap name="Information">
        <add key="/Information/CorporateSales.aspx"
             value="/KB/Information/CorporateSales" />
        <add key="/Information/ComputerRepair.aspx"
             value="/KB/Information/ComputerRepair" />
    </rewriteMap>
</rewriteMaps>

这甚至最初是由 IIS 管理器中的向导创建的,用于使用重写映射。

所以这个想法是 /Information/CorporateSales.aspx --> /KB/Information/CorporateSales 带有 301 重定向(永久移动)。

但是,我只是加载了原始的 aspx 页面(我们稍后将删除)。我什至删除了文件,以防它默认为现有资源,这样我就得到了一个没有重定向的普通 404。

有人有想法吗?

让我澄清一下:

重写模块works,它已安装并正在运行。我的标准正则表达式规则运行良好。但我的rewrite map没有。

【问题讨论】:

    标签: asp.net iis-7 url-rewriting


    【解决方案1】:

    这篇文章http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module 和下面的代码对我有用。

    <rewrite>
        <rules>
            <rule name="Redirect rule1 for RedirectURLs">
                <match url=".*" />
                <conditions>
                    <add input="{RedirectURLs:{REQUEST_URI}}" pattern="(.+)" />
                </conditions>
                <action type="Redirect" url="{C:1}" appendQueryString="false" />
            </rule>
        </rules>
        <rewriteMaps>
            <rewriteMap name="RedirectURLs">
                <add key="/privacy.php" value="/privacy" />
            </rewriteMap>
        </rewriteMaps>
    </rewrite>
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,发现了这个问题。我花了一点时间,但我能够弄清楚问题所在。

      我的 rewriteMap 包含网址“/Default2.aspx”和“/Dashboard.aspx”。

      当我转到 Default2.aspx 时,我会得到 404,而不是按预期重定向到 Dashboard.aspx。

      我发现的问题是,在我的机器上,应用程序在子目录中运行。仅当我使用完整路径(包括应用程序文件夹)时,rewriteMap 路径才有效,例如“/TestSite/Default2.aspx”。

      所以我可以在我的 rewriteMap 中添加重复的条目来说明开发人员机器上的应用程序目录,但这看起来很混乱。我查看了应用程序中没有此问题的其他重写规则,我注意到它们使用的是 {REQUEST_FILENAME} 变量,而不是 {REQUEST_URI}。所以我将规则切换为使用 {REQUEST_FILENAME} 并从我的 rewriteMap 中的 url 中删除第一个斜杠。

      【讨论】:

        【解决方案3】:

        您是否安装了 URL 重写作为 IIS7/7.5 的一部分?默认情况下不安装。另外,请确保您的应用程序池设置为集成管道模式,而不是经典模式。

        编辑

        从这里:

        http://learn.iis.net/page.aspx/469/using-rewrite-maps-in-url-rewrite-module/

        我看到您正在做的唯一一件事就是添加“stopProcessing”属性。你试过删除它吗?

        【讨论】:

        • 已安装并集成
        【解决方案4】:

        之前我遇到了和你描述的一样的问题。

        你能把你的代码更新为

        <match url="(.*)" />
        

        我希望你知道,

         <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />
        

        此条件将捕获除域之外的完整 URL。 此网址上的示例: www.example.com/Information/CorporateSales.aspx 它将检查匹配条件 Information/CorporateSales.aspx 在 rewriteMap 上

        肯定不会和这个网址匹配

        www.example.com/old/Information/CorporateSales.aspx

        【讨论】:

          【解决方案5】:

          您是否重置了应用程序池和 iis 站点?

          在某些情况下,它可能需要长达 72 小时 (iirc) 才能在全球传播。

          【讨论】:

          • 这是一台本地开发机器,我不仅重置了应用程序池,还重置了所有 iis。
          猜你喜欢
          • 2015-11-20
          • 2012-10-09
          • 2012-04-28
          • 1970-01-01
          • 2012-10-24
          • 1970-01-01
          • 2011-05-07
          • 1970-01-01
          • 2011-11-11
          相关资源
          最近更新 更多