.NET url重写示例

1.下载 URLRewriter.dll 引用到项目里。

2.在配置文件web.config添加

<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>

  

3.配置重写规则

<RewriterConfig>
<Rules>
<!--如果有多个参数,用()
<LookFor>~/List(\d+)/List_(\d+)\.aspx</LookFor> 
<SendTo>~/List.aspx?ClassID=$1&Page=$2</SendTo>
-->

<!--=======================================-->
<!-- 1 html重写-->
<RewriterRule>
<LookFor>~/lesson/(\d{0,999999})/(\d{0,999999})\.html</LookFor>
<SendTo>~/lesson/lessonplay.aspx?id=$2</SendTo>
</RewriterRule>

<!-- 2  *目录重写-->
<RewriterRule>
<LookFor>~/lesson/(\d{0,999999})/</LookFor>
<SendTo>~/lesson/lesson.aspx?id=$1</SendTo>
</RewriterRule>

<RewriterRule>
<LookFor>~/lesson/</LookFor>
<SendTo>~/lesson/index.aspx</SendTo>
</RewriterRule>

<RewriterRule>
<LookFor>~/lesson</LookFor>
<SendTo>~/lesson/index.aspx</SendTo>
</RewriterRule>


</Rules>
</RewriterConfig>

  

4.

web.config 配置好后,

  A:针对html还需要配置一下IIS站点属性,IIS站点>属性>主目录>配置>,这里添加一个和.html的扩展名映射,可执行文件和.aspx的是一样的,同时取消确认文件是否存在选项。

配置完这个以后html  重写就生效了。

  B:对于目录url重写情况需要在.aspx添加一个*.*的映射,可执行文件和.aspx的也是一样的,同时取消确认文件是否存在选项。

这样目录url重写就可以浏览了。

 

5.为让原本的html文件能正常访问,需要在<compilation >节点里添加下面一行

<buildProviders>
                <add extension=".html" type="System.Web.Compilation.PageBuildProvider" /> <!--加上这个节点,保证原本就是.html类型的文件能正常访问-->
</buildProviders>

  

在本地图片、css、js可能不能正常显示。需要配置到IIS上。

 

6.可能存在的问题和解决办法:

 

A.图片不显示(CSS、JS路径不对) (若图片显示正确,不必修改)

修改图片的代码路径,例如:

<img src="images/map.gif" />

修改为:

<img src="http://images.cnblogs.com/images/map.gif" />

B.网站性能下降

解除图片文件夹的*.*映射(CSS、JS文件夹的操作是一样的)

IIS站点>图片文件夹>属性>目录>创建,删除如下图所示的那一项之后就解除了该文件夹下的*.*映射

 

这样配置完了之后,图片可以正常显示,并且能显著解决url重写后对整个站点带来的性能问题。

 

 代码示例下载:这里

 

 后记:

最后一步,不能删除*的扩展映射

删除后,就不能启用无后缀的重写,类似: mi.com/cgi/10145

但启用无后缀重写后,就等于把该站点所有文件都通过aspnet_isapi.dll来处理,这时候访问页面,css,js,图片都没有显示,打开打一个css文件提示:

没有为扩展名“.css”注册的生成提供程序。可以在 machine.config 或 web.config 中的 <compilation><buildProviders> 节注册一个。请确保所注册的提供程序具有包含值“Web”或“All”的 BuildProviderAppliesToAttribute 特性。

 

这是因为程序把css文件当做一个动态程序了,解析自然会出错,

这个时候,

就需要在web.config文件里配置css,js,等不需动态处理的文件不要经过动态程序处理

配置如下:

 

<httpHandlers>

            <!-- 不需动态处理的文件后缀,都需要写这里 -->
            <add verb="*" path="*.js" type="System.Web.StaticFileHandler"/>
            <add verb="*" path="*.css" type="System.Web.StaticFileHandler"/>
            <add verb="*" path="*.jpg" type="System.Web.StaticFileHandler"/>
            <add verb="*" path="*.png" type="System.Web.StaticFileHandler"/>
            <add verb="*" path="*.gif" type="System.Web.StaticFileHandler"/>

            <!--需要动态处理的文件-->
            <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
            <add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>

        </httpHandlers>

 

保存后,css,js,图片,都可正常访问。若该站点下新增一种文件后缀,都需要在配置文件里添加一条,交由静态处理。

但这有一个弊端:若在该站点下,有一个用于下载的rar文件,但又没有在配置文件里添加handlers,这个文件就无法下载,也会报错。

所以:

所有静态资源文件,应该放到二级域名或其他域名下,不需要经过动态程序处理,访问速度上也较快,也便于管理文件

 

 

 

 

posted @ 2011-12-09 23:15  陈其龙  阅读(396)  评论(0)    收藏  举报