如何在asp.net中将RedirectType添加到外部配置文件

时间:2014-11-26 12:03:50

标签: redirect web-config http-status-code-301 http-status-code-302

我在应用程序根目录中有一个单独的.config文件,其中包含Mapped URLS for redirect并在.config中为web.config引用了此301 Permanent Redirect文件!这很好用。

See Reference Link

现在,我还要添加一些链接,这些链接将重定向为302状态代码。如何在外部.config文件中添加302重定向并相应地重定向。

rewritemaps.config

<rewriteMaps>
    <rewriteMap name="Redirects">
       <add key="/oldcellphone" value="/newcellphones.aspx" />
    </rewriteMap>
</rewriteMaps>

我们可以在此文件中指定重定向类型,即301/302吗?

的web.config

<system.webServer>
     <rewrite>
      <rewriteMaps configSource="rewritemaps.config">
        </rewriteMaps>
          <rules>
            <rule name="Redirect rule1 for Redirects">
              <match url=".*" />
              <conditions>
                <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
              </conditions>
              <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent"/>
            </rule>
          </rules>
        </rewrite>
    </system.webServer>

注意:目前文件'rewritemaps.config'中的所有链接都设置为301 Status中的web.config

我们可以在rewritemaps.config中添加如下内容并相应地重定向:

<add key="/oldcellphone" value="/newcellphones.aspx" [RedirectType=301] />
<add key="/oldphone" value="/newphones.aspx" [RedirectType=302] />

大约有1000 links of 301 Status和大约400 links for 302 Status。如果在external file(rewritemaps.config)中无法实现,那么请建议首选方式吗?

更新 如果请求的URL中有特定的字符串匹配,您能帮助我重定向到另一个站点(不同的域)。 例如:如果请求的URL包含&#34; / hm1&#34;然后重定向到不同的网站。即http://www.google.com

的Web.config

<rule name="othersite" stopProcessing="true">
<match url="^/hm1$" />
<action type="Redirect" url="http://www.google.com" redirectType="Found"/>
</rule>

的.aspx

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="/hm1">other site (http://www.google.com)</asp:HyperLink>

1 个答案:

答案 0 :(得分:0)

您可以将RedirectType添加到重写地图中吗?不,不幸的是没有。

要实现您要做的事情,您需要创建两个重写映射和两个重写规则 - 一个用于301重定向,一个用于302重定向。

这是一个可能看起来如何的例子:

<rewrite>
  <rules>
    <rule name="301Redirects" stopProcessing="true">
      <match url=".*" />
      <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" />
      <conditions>
        <add input="{301Redirects:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
    </rule>
    <rule name="302Redirects" stopProcessing="true">
      <match url=".*" />
      <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Found" />
      <conditions>
        <add input="{302Redirects:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="301Redirects">
      <add key="/oldurl" value="/newurl" />
    </rewriteMap>
    <rewriteMap name="302Redirects">
      <add key="/oldcellphone" value="/newcellphones.aspx" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>