首页 > 解决方案 > 带有查询字符串的 .aspx url 无法在没有 .aspx 的情况下重定向到 url - 我还想在新 url 上保留查询字符串

问题描述

我必须将多个 URL 重定向到新 URL。旧 URL 带有扩展名 (.aspx) 我已使用 IIS 将所有旧 URL 重定向到新 URL,它工作正常。但是当一些查询字符串被添加到旧 URL 时,它不会重定向到新 URL。

例如,重定向非常适合:/course-guide.aspx 到 /course-guide

但是当添加查询字符串(/course-guide.aspx?UTM=campain)时,它会转到 404 页面未找到。但它应该去 /course-guide?UTM=campain

在查询字符串中,它可以是任何东西。所以我必须在 web.config 中编写一个规则,以便它适用于所有人。

<rewrite>
   <rules> 
     <rule name="Redirect old url to Newb">
        <match url=".*" />
            <conditions>
                <add input="{Newb:{REQUEST_URI}}" pattern="(.+)"  />
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="false"  />
     </rule>
  </rules>
  <rewriteMaps>
     <rewriteMap name="Newb">
         <add key="/about-us.aspx" value="/about-us" />
         <add key="/course-guide.aspx" value="/course-guide" />
         </rewriteMap>
  </rewriteMaps>
</rewrite>

我期待 /course-guide.aspx?UTM=camp 重定向到 /course-guide?UTM=camp 并且在查询字符串中它可以是任何东西。

标签: c#asp.netredirectiisweb-config

解决方案


如果添加从非 .aspx 重写为 aspx 的规则会发生什么?

<rewrite>
   <rules> 
     <rule name="Redirect old url to Newb">
        <match url=".*" />
            <conditions>
                <add input="{Newb:{REQUEST_URI}}" pattern="(.+)"  />
            </conditions>
            <action type="Redirect" url="{C:1}" redirectType="Permanent" appendQueryString="true"  />
     </rule>
     <rule name="Rewriter" stopProcessing="true">
        <match url="^([^/]+)?$"/>
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        </conditions>
        <action type="Rewrite" url="{R:1}.aspx"/>
    </rule>
  </rules>
  <rewriteMaps>
     <rewriteMap name="Newb">
         <add key="/about-us.aspx" value="/about-us" />
         <add key="/course-guide.aspx" value="/course-guide" />
         </rewriteMap>
  </rewriteMaps>
</rewrite>

推荐阅读