zoukankan      html  css  js  c++  java
  • ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI .

    本文转载自 月儿清清:http://blog.csdn.net/21aspnet/article/details/1534346

    URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页。微软提供的方法需要在根目录里面建立jyk的文件夹,然后再建立一个default.aspx的文件,如果您有100名会员的话,这是一个不可想象的事情。

    另一个方法就是使用ISAPI过滤器,但是这个一般需要在服务器上安装一个DLL文件,自己没有服务器就不好办了。

    下面提供一个可以说是我发明的一个方法——不知道以前有没有人想到过——利用两个特性来实现。

    第一个:IIS里面的找不到文件的错误设置。

    第二个:asp.net 里面的Server.Transfer("topic.aspx?id=jyk");

    这两个结合起来就可以达到我们的目的了。

    思路:利用404b错误捕捉客户的请求,再使用Server.Transfer转向。

    在我们访问http://www.aaa.com/jyk 的时候,假设这时服务器上没有jyk文件夹,那么会返回什么结果呢?会返回一个“无法找到该页”的页面,那么这个返回结果能不能自己控制一下呢?很幸运IIS提供了这个功能,我们可以把这样的错误指定到网站里的一个页面。

    操作步骤:

    第一步:打开IIS管理器,网站属性——自定义错误标签——404错误——点击修改——修改“消息类型”为“URL”,在下面的文本框里填写处理这个错误得页面名称,比如/none.aspx。

    第二步:在我们的网站根目录下建立一个none.aspx的网页。在里面随意写点内容(测试用)。

    设置完毕,这时再访问http://www.aaa.com/jyk,显示的就是 none.aspx的网页内容了。注意这时浏览器里面的URL地址仍然是http://www.aaa.com/jyk,而不是http://www.aaa.com/none.aspx 。这一点很重要,如果地址变了,那就没有意义了。

    那么我们怎么把页面转到我们希望的页面呢,这时所有的找不到文件的情况都会转到none.aspx文件,显然这不是我们想要的最终结果。那么我们怎么获取客户输入的网址呢?

    打开none.aspx的后台文件,

    string URL = Request.Url.Query;

    我们可以使用上面的语句来获取URL地址,得到的地址格式是:

    ?404http://www.aaa.com/jyk

    其中 “?404”是固定的,过滤掉它就是浏览器里面的URL地址了。

    剩下的事情就是根据情况来转换网页了。可以拆串,再用switch来判断;也可以用正则表达式来判断。因为我正则不熟,我采用的是switch的方式。正则表达式请参考其他的资料,我也在找,如果您找到了请共享一下,谢谢。

    优点:

    1、 支持无扩展名的网页。不用建立文件夹和文件。

    2、 思路简单,用法也很简单,代码也不复杂,不涉及高深的理论;

    3、 支持搜索引擎,就是说可以被各大搜索引擎搜录。

    4、 可以配合域名泛解析使用。

    缺点:

    1、 需要修改一下IIS 404b错误的处理方法;

    2、 效率要略微低一点。

    3、 如果您只使用.aspx的扩展名的话就可以不用修改IIS了。

    4、 Asp不支持。因为asp的Server.Transfer不能带参数(?id=jyk),不能传递参数的重写几乎没有什么意义。

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    链式表的按序号查找
    可持久化线段树——区间更新hdu4348
    主席树——树链上第k大spoj COT
  • 原文地址:https://www.cnblogs.com/xinting/p/12536187.html
Copyright © 2011-2022 走看看