带有查询字符串的 .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>
我必须将多个 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>