惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - 恋地高飞

超级弹窗代码(P2P,360都拦截不了 sql批量修改表名(前缀)--亲测 baset64加密解密代码 com/c.js木马攻击...(转) asp.net TextBox显示密码 - 恋地高飞 - 博客园 Ext.Window窗口下onclick="Button1_Click",不能提交的问题 IIS7 中使用 UrlRewritingNet(转) Reflector使用手记 学习SQL Server全文索引 (转 ) 查询同一表内多字段同时重复记录的SQL语句 asp.net中Excel导入(使用微软OLEDB驱动) asp.net获取URL和IP地址 警告: 程序集绑定日志记录被关闭。 Repeater1绑定数据,编辑数据的一些参考文章 asp.net下linkbutton的前后台使用方法 sqlserver 中判断是否数字,是否汉字的方法 301永久重定向asp.net实现方法 Net程序如何防止被注入 FusionCharts一款flash统计控件,可以用于C#
UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射) (转)
恋地高飞 · 2008-09-03 · via 博客园 - 恋地高飞

  URL重写好处有很多,如有利于SEO、便于记忆、隐藏真实路径使安全性提高、便于更新等等。本文概要描述了各种URL重写的实现。
  ASP.NET 2.0 中实现URL重写有很多方法,如:Global.asax中捕获用Application_BeginRequest请求,再用HttpContext类的Rewrite方法或Server.Transfer方法实现重写;自己实现IHttpModule实现重写;还有的利用服务器的404错误引导到新的页面实现重写;最后就是用组件实现重写(基本原理大多也是实现IHttpModule、IHttpHandler接口处理请求)。
  如果自己处理请求,实现起来麻烦,特别是在大项目中,做好使用组件实现。网上有很多开源或免费的实现URL重写的组件,选择余地特别大。当初我选择的标准是小巧、快速、实现常用的URL重写功能。经过比较选择了只有32KB大小的UrlRewritingNet
查看其文档主要功能有以下一些:

1.基于正则表达式的重写
2.支持Themes和母版页
3.支持输出缓存
4.支持信任级别为"Medium"的使用环境
5.支持Postback
6.支持无Cookie的Session
7.运行时添加、修改改写规则
8.容易安装使用

OK!功能完全够用,就选他了!

Web.config中的配置:

<configuration>
  
<configSections>
    
<section name="urlrewritingnet"  
             requirePermission
="false"
             type
="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"  />
  
</configSections>
  
<urlrewritingnet
    
rewriteOnlyVirtualUrls="true"  
    contextItemsPrefix
="QueryString"
    defaultPage
= "Default.aspx"
    defaultProvider
="RegEx"
    xmlns
="http://www.urlrewriting.net/schemas/config/2006/07" >
    
<rewrites>
      
<add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"
           rewriteUrlParameter
="ExcludeFromClientQueryString"
           destinationUrl
="~/Default.aspx?ID=$1"
           ignoreCase
="true" />
      
<!--更多重写规则-->
    
</rewrites>
  
</urlrewritingnet>
    
<appSettings/>
    
<connectionStrings/>
    
<system.web>
      
<httpModules>
        
<add name="UrlRewriteModule"
           type
="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
      
</httpModules>
        
<!--
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会
            影响性能,因此只在开发过程中将此值
            设置为 true。
        
-->
        
<compilation debug="true" />
        
<!--
            通过 <authentication> 节可以配置 ASP.NET 使用的
            安全身份验证模式,
            以标识传入的用户。
        
-->
        
<authentication mode="Windows" />
        
<!--
            如果在执行请求的过程中出现未处理的错误,
            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
            开发人员通过该节可以配置
            要显示的 html 错误页
            以代替错误堆栈跟踪。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>

-->
    
</system.web>
</configuration>

测试用的文件:Default.aspx

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>URL 重写测试 飘遥 http://xianfen.net</title>
</head>
<body>
    
<form id="form1" runat="server">
        
<div>
            
<%
                Response.Write(
"原始URL:" + Request.RawUrl + "<br />");
                Response.Write(
"获取的ID:" + Request.QueryString["ID"]);        
            
%>
        
</div>
    
</form>
</body>
</html>

 (一)、扩展名不变的重写:
重写规则:

<add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

IIS配置:(此配置应该为默认配置,但有的虚拟主机提供商修改了此配置)
网站->属性->目录->配置(

G

)...->映射->应用程序扩展->扩展名 .aspx ->编辑->"确认文件是否存在"复选框不选
运行结果:

(二)、伪静态重写,扩展名为.html等
重写规则:

<add name="RewritePhoto" virtualUrl="^~/(\d+).html"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

IIS配置:网站->属性->目录->配置(

G

)...->映射->应用程序扩展->添加
可执行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
扩展名:.html
动作:限制为 GET,HEAD,POST,DEBUG
脚本引擎:选中
确认文件是否存在:不选
运行结果:

(三)、任意扩展名的重写 如:扩展名为.zxjay
重写规则:

<add name="Rewrite1" virtualUrl="^~/(\d+).zxjay"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />  

IIS配置:同上
运行结果:

(四)、无后缀的重写
重写规则:

<add name="Rewrite1" virtualUrl="^~/(\d+)/Default.aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

IIS配置:网站->属性->目录->配置(

G

)...->映射->通配符应用程序映射->插入
可执行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
确认文件是否存在:不选
如图:

其原理是:请求"当前目录"时,查找默认文档,实现重写,因此重写规则中的"^~/(\d+)/Default.aspx"要与第一个默认文档相对应。
关于“通配符应用程序映射”的详细信息可参考微软的说明
运行结果:

(五)、二级域名到多级域名的重写
(注意:由于条件的限制,该规则没有测试,理论上可以实现,如果有错误,请留言指正,谢谢!)
重写规则:

<add name="Rewrite1" virtualUrl="^http\://(.*).xianfen.net/Default.aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

注意,在进行二级域名重写时要对一个地方进行重新设置:

Code

注意事项:
重写规则、参数个数等等可以自己定义,还可以在运行时添加、修改重写规则,也可以扩展该组件的功能来满足形形色色的需求。具体可查看其文档和源码
本文示例仅在本机上测试,并且没有严格测试,仅第一种重写方式正在虚拟机上使用,就是您看到的本个人博客系统(http://xianfen.net/)使用的改写规则。
如果发现错误或疏漏,请留言告知,不胜感激。为防止有误人子弟之嫌,特此声明。

本文来自飘遥的Blog(http://www.xianfen.net)