带有查询字符串的 .aspx url 无法重定向到没有 .aspx 的 url - 我还想在新的 url 上保留查询字符串

.aspx url with query string is unable to redirect to url without .aspx - Also i want to retain the query string on new url

我必须将多个 URL 重定向到新的 URL。旧 URL 的扩展名为 (.aspx) 我已使用 IIS 将所有旧 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 在查询字符串中它可以是任何东西。

根据 https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module 你应该在你的条件下命名 rewriteMap,像这样:

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

您的规则对 {REQUEST_URI} 使用了完全匹配,并且该变量还包含查询字符串。所以尝试将 {REQUEST_URI} 替换为 {URL}.

<rules>
                <rule name="Redirect old url to Newb" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{Newb:{URL}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" url="{C:1}" appendQueryString="true" redirectType="Temporary" />
                </rule>

如果添加从非 .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>