当前位置: 代码迷 >> ASP.NET >> Net URL 重写技术,该怎么处理
  详细解决方案

Net URL 重写技术,该怎么处理

热度:4394   发布时间:2013-02-25 00:00:00.0
Net URL 重写技术
我用的是 VS 2005 的开发工具想使用微软的重写组件(download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi)
我在Web.Config中是这样设置的
<?xml version="1.0"?>

<configuration>
  <!--这里要加入一个configSections节-->
  <configSections>
  <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>

  <!--这里要加入一个RewriterConfig用来配置规则-->
  <RewriterConfig>
  <Rules>
  <RewriterRule>
  <!--匹配guid参数-->
  <LookFor> ~/([A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12})\/Class.aspx </LookFor>
  <SendTo> ~/Class/Default.aspx?id=$1 </SendTo>
  <!--即访问类似于~/9e808623-f0f9-49c4-86f2-9891015d405b/Class.aspx的页面将发往~/Class/Default.aspx?id=9e808623-f0f9-49c4-86f2-9891015d405b-->
  <LookFor>~/Default</LookFor>
  <SendTo>~/Default.aspx</SendTo>
  </RewriterRule>
  </Rules>
  </RewriterConfig>

  <appSettings/>
  <connectionStrings/>

  <system.web>

  <httpHandlers>
  <!--这里加入urlRewriter.dll要处理的后缀文件-->
  <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  <add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
  </httpHandlers>

  <compilation debug="true"/>
  <authentication mode="Windows"/>
  </system.web>
</configuration>
而连接是这样的
  <a href="Default">aaaaaaaaaaa</a>
想连接到
  Default.aspx 这个页面
但是总是说无法找到该页不知道那里还需要修改.请大家指点一下


------解决方案--------------------------------------------------------
ASP.net中实现UrlRewrite最快捷的方法(2.0测试通过):
在你的站点的Global.asax文件中添加以下代码:

void Application_BeginRequest(object sender, EventArgs e) {
string oldUrl = HttpContext.Current.Request.RawUrl;
string newUrl = oldUrl;
string[] pattern = ConfigurationManager.AppSettings["UrlPattern"].Split('@');
string[] replace = ConfigurationManager.AppSettings["UrlReplace"].Split('@');
for (int iii = 0; iii < pattern.Length; iii++)
{
if (Regex.IsMatch(oldUrl, pattern[iii], RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
newUrl = Regex.Replace(oldUrl, pattern[iii], replace[iii], RegexOptions.Compiled | RegexOptions.IgnoreCase);
oldUrl = newUrl;
}
}
this.Context.RewritePath(newUrl);
}

然后修改你的web.config:
添加以下两个appSettings:

<add key="UrlPattern" value="(.+)default-(\d+)-(\d+)\"/>
<add key="UrlReplace" value="$1default.aspx?typeid=$2&amp;page=$3"/>

前一个是请求的URL,后一个表示替换后真实的URL,多个正则表达式间用@分隔
上面的表达式表示将形如:
http://www.qq.net/default-1-1
的请求转换为:
http://www.qq.net/default.aspx?typeid=1&page=1

更多的扩展可通过添加不同的正则表达式来完成,正则替换是从前往后的,注意不要冲突

------解决方案--------------------------------------------------------
web.config里面少了句:
C# code
    <httpModules>      <add type="URLRewriter.ModuleRewriter, URLRewriter"  name="ModuleRewriter" />    </httpModules>
  相关解决方案