如何正确地将带有.aspx的URL重写为没有.aspx的URL?

时间:2010-10-06 19:18:00

标签: asp.net

我的网站目前在其网页上使用.aspx扩展名。它正在进行Joomla转换,而.aspx扩展将不再起作用。我需要它,以便如果有人输入.aspx扩展名,它将被删除URL,因此当前网站上没有任何SEO中断。

例如,我需要 www.arrc.com.php5-17.websitetestlink.com/services/managed-services.aspx 被重写/重定向到 www.arrc.com.php5-17.websitetestlink.com/services/managed-services

这就是我在web.config中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
     <rules>
      <rule name="Migrate to PHP">
       <match url="^([_0-9a-z-]+)\.aspx" />
       <action type="Redirect" redirectType="Permanent" url="{R:1}" />
      </rule>
      <rule name="Rewrite .aspx">
         <match url="^([_0-9a-z-]+)/?([_0-9a-z-]+)\.aspx" />
         <action type="Redirect" redirectType="Permanent" url="{R:1}/{R:2}" />
      </rule>
     </rules>
    </rewrite>
  </system.webServer>
</configuration>

第一个网址匹配适用于任何网址,例如services.aspx而不是services / managed-services.aspx

每当我访问www.arrc.com.php5-17.websitetestlink.com/services/managed-services.aspx时,它都会给我一个内部服务器错误,但www.arrc.com.php5-17.websitetestlink.com /services.aspx正确重写。我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

他们贪婪,切换顺序。

   <rule name="Rewrite .aspx">
     <match url="^([_0-9a-z-]+)/?([_0-9a-z-]+)\.aspx" />
     <action type="Redirect" redirectType="Permanent" url="{R:1}/{R:2}" />
  </rule>

 <rule name="Migrate to PHP">
   <match url="^([_0-9a-z-]+)\.aspx" />
   <action type="Redirect" redirectType="Permanent" url="{R:1}" />
  </rule>

答案 1 :(得分:0)

两个潜在问题:

  1. 我认为对于重写,它会按顺序击中它们,这意味着第一条规则将始终开始。尝试切换规则的顺序。

  2. 短划线应该在[_0-9a-z-]中正常工作,但请尝试转义短划线。