虚拟主机上用Asp.net实现Urlrewrite

在网上看到,很多朋友在ASP.NET中做urlrewrite,用的是HttpHandle+Server.Transfer的方法。其实这种方法是错误的。第一,HttpHandle是实现不了urlrewrite的;第二Server.Transfer是标准的重定向,根本不是urlrewrite。

其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现。

我这里介绍的是在虚拟主机上,虚拟主机不同于自己的服务器,你是没有权限去修改IIS,也没有权限去安装iis rewrite之类的IIS插件。但是我们仍然可以轻松完成需要的功能。

具体做法如下:打开global.asax.cs,定位到protected void Application_BeginRequest(Object sender, EventArgs e)。从方法名我想也能猜到它是做什么的。输入如下代码:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   string oldUrl = HttpContext.Current.Request.RawUrl ;

   string pattern = @"^(.+)default/(\d+)\.ASPx(\?.*)*___FCKpd___0quot;;
   string replace = "$1default.aspx?id=$2";

   if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase RegexOptions.Compiled))
   {
        string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled
RegexOptions.IgnoreCase);
        this.Context.RewritePath(newUrl);
   }
}有了上边这段代码,我访问一个类似:.../default/123.ASPx 的网址,当然这个网址在我的电脑上不存在,它就会被定向到:.../default.aspx?id=123。

当然,利用功能强大的正则表达式,你可以任意按照自己的需要来重写url,

这一切都是在服务器端默默的进行,在客户端是不会有任何察觉的。由于是在虚拟主机上,我们只能重定向.ASPx文件,如果是自己的服务器,只要把后缀名在IIS中注册一下,就可以实现任意后缀名的处理。比如你可以注册一个*.myweb这样的类型,这样别人访问default/456.myweb时,你可以把它重定向到default.aspx?id=456。总之一句话,只要你能想到.NET就可以帮你实现,并且这一切不需要多少的代码。

时间: 2024-10-28 15:06:50

虚拟主机上用Asp.net实现Urlrewrite的相关文章

在虚拟主机上用asp.net轻松实现urlrewrite

asp.net|虚拟主机    在网上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法.其实这种方法是错误的.第一,HttpHandle是实现不了urlrewrite的:第二Server.Transfer是标准的重定向,根本不是urlrewrite.     其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现.     我这里介绍的是在虚拟主机上,虚拟主机

虚拟主机上asp.net运行权限不足问题及解决

asp.net|解决|问题|虚拟主机    有些时候我们写的asp.net应用程序是运行在虚拟主机上.有一些虚拟主机可能是由于安全的考虑,对asp.net做了权限设置,会导致我们的应用程序无法正常运行. 问题现象:     由于某种原因,asp.net不能加载某些dll文件,出现如下错误提示: Server Error in '/' Application.--------------------------------------------- Required permissions can

asp.net应用程序如何发布到国外免费的支持asp.net的虚拟主机上?

问题描述 各位好!小弟刚学asp.net,前几天申请了一个国外提供的支持asp.net的虚拟主机(给了我FTP地址),请问如何才能将我生成的asp.net程序发布到这个虚拟主机上.对了,还要告诉大家,登陆这个网站后,可以通过这个网站的主页来设置我的虚拟空间的目录,将我开发的项目按照项目目录直接COPY过去能行吗?还有一个问题想请教各位大哥,小弟想通过自家的对等网(两台电脑通过宽带路由器相连并接入INTERNET.一台运行windows2000server,另一台运行windowsXPprofes

perl-无法访问虚拟主机上的Perl程序

问题描述 无法访问虚拟主机上的Perl程序 我将本地写好Perl程序上传到虚拟主机上public_html目录,权限也设置了, 但是就是无法访问,提示: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaste

服务器-一个关于学习的android客户端上面加入讨论功能。想部署到虚拟主机上。

问题描述 一个关于学习的android客户端上面加入讨论功能.想部署到虚拟主机上. 但是不知道后台服务器后与数据库之间怎么编写.大家有没类似的demo..现在不会ssh和php.如果有合适的方法.十分乐意愿意花时间学习.![![![![ 解决方案 你把程序写好,当然可以部署了,只是你至少要会PHP或者jsp,不然你怎么写后台?淘宝买的虚拟主机估计限制很大,这个要看你自己的需求了. 解决方案二: 用web service做后端,前端做一个界面就可以了. 解决方案三: 这个问题比较复杂,上百度查

FTP使用手册:怎么将文件上传到阿里云虚拟主机上?

注意,请先到阿里云官网领取幸运券,除了价格上有很多优惠外,还可以参与抽奖.详见:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=2a7uv47d&utm_source=2a7uv47d 1.你可以从网上下载个FTP软件,本文以FLASHFXP这个FTP软件为例进行了介绍,各FTP软件其实是大同小异的,都差不多. 2.程序运行后,按下图点击:Site Manager. 3.然后,点击:New Si

虚拟主机上,hibernate的连接池如何配置

问题描述 有这方面经验的,希望能指导一下,最好能给出C3PO的配置,或者proxool的配置,如果能解决,分数全部奉上,谢谢:下面的配置不行,而且修改了几个类似参数也不行,最好能说明原因<!-- 最大连接数 --><property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数 --><property name="hibernate.c3p0.min_siz

在虚拟主机上部署ASP.NET AJAX 1.0 Beta的程序集

ajax|asp.net|程序|虚拟主机 由于ASP.NET AJAX 1.0 Beta将所需的程序集注册到了GAC中,因此有朋友担心无法在虚拟主机上部署ASP.NET AJAX了(总不见得让服务商在GAC中安装那些程序集吧).其实解决这个问题的方法非常简单.由于ASP.NET在搜索GAC之前,会首先在Bin目录中查找所需的程序集,因此只需简单地将所需的程序集复制到Web Site的Bin目录下即可. 当然,这只是部署ASP.NET AJAX 1.0程序集的方式,并不排除由于虚拟主机上的设置导致

ASP教程:UrlRewrite 使用参考文档

参考|教程 ASP教程:UrlRewrite 使用参考文档 什么是UrlRewrite?UrlRewrite 是 将静态页面转换为动态页面的一种技术. 例如.您网站页面是 http://www.yourdomain.com/news/docread.aspx?id=123 使用UrlRewrite转换后 可以 以 http://www.yourdomain.com/news/123.html 来访问. UrlRewrite的用处: 满足搜索引擎的要求,google可以抓取动态页面,但是googl