ASP.NET web application中的redirect

Posted 新西兰程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET web application中的redirect相关的知识,希望对你有一定的参考价值。

在开发ASP.NET MVC web application过程中,开发上线了新系统后,需要把老系统的url redirect新系统下

其中在项目系统目录下有一个文件 301RedirectsPages.config, 内容如下:

<rewriteMaps>
    <rewriteMap name="Redirects">
           <add key="/contact-us.aspx" value="/contact-us" />
        <add key="/services-solutions" value="/services-and-solutions" />
        <add key="/sales-support" value="/sales-and-support" />
        <add key="/events-news" value="/events-and-news" />
        <add key="/services-solutions/services.aspx" value="/services-and-solutions/services" />
        <add key="/services-solutions/solutions.aspx" value="/services-and-solutions/solutions" />
        </rewriteMap>
</rewriteMaps>



在web.config文件中,在system.webServer下面,有一个rewrite节点,显示如下:
<system.webServer>
    <rewrite  xdt:Transform="Replace">
      <rewriteMaps configSource="301RedirectsPages.config" />
      <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
        <rule name="Remove trailing slash" stopProcessing="true">
          <match url="(.*)/$" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="{R:1}" />
        </rule>
        <rule name="Redirects">
          <match url=".*" />
          <conditions>
            <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
          </conditions>
          <action type="Redirect" url="{C:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

这种情况下,在浏览器窗口输入URL:

localhost/contact-us.aspx 将自动redirect到 localhost/contact-us

localhost/services-solutions/services.aspx 自动redirect到 localhost/services-and-solutions/services

localhost/services-solutions/solutions.aspx 自动redirect到 localhost/services-and-solutions/solutions

但是,当你输入

localhost/services-solutions 不能自动redirect到 localhost/services-and-solutions

localhost/sales-support 不能自动redirect到 localhost/sales-and-support

localhost/events-news 不能自动redirect到 localhost/events-and-news

 

查找了半天的原因,才发现是在web.config 中的设置

appendQueryString="true" 应该改成 appendQueryString="false"

也就是这一行  <action type="Redirect" url="{C:1}" appendQueryString="true" />

应该改成 <action type="Redirect" url="{C:1}" appendQueryString="false" />

改成后的web.config文件如下:

 <rewrite  xdt:Transform="Replace">
      <rewriteMaps configSource="301RedirectsPages.config" />
      <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
        <rule name="Remove trailing slash" stopProcessing="true">
          <match url="(.*)/$" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="{R:1}" />
        </rule>
        <rule name="Redirects">
          <match url=".*" />
          <conditions>
            <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
          </conditions>
          <action type="Redirect" url="{C:1}" appendQueryString="false" />
        </rule>
      </rules>
    </rewrite>

 

 



 








以上是关于ASP.NET web application中的redirect的主要内容,如果未能解决你的问题,请参考以下文章

使用EF Database-First Application部署ASP.NET Web API

ASP.NET Web Application中使用链接文件

jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json

asp.net html静态文件没有触发global.asax中的Application_BeginRequest事件的解决方法

什么时候在 asp.net WebService 中调用 Application_End

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST