日期:2014-05-18  浏览次数:20422 次

应用URLRewriter.dll在web.config实现伪静态,在IIS上无法实现
本地用vs2008测试的时候没问题 放到iis里的话 就不支持伪静态了
.

需要怎么设置?

------解决方案--------------------
在iis里的ISAPI筛选器添加:
路径 名称
1.C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll ASP.Net_2.0.50727.0
2.C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll ASP.Net_2.0_for_V1.1
3.C:\urlrewriter\UrlRewriter.dll(这个文件必须在C盘根目录) urlwriter
------解决方案--------------------
使用说明:(重点在Web.config中的<RewriterConfig>节点)
一、把文件夹中的URLRewriter.dll拷到项目的Bin目录下,并添加一下引用

二、打开Web.config文件,加三个节点
1.这个节点,在创建成Ajax网站时就已经有了,只要把里面的那一节加进去就OK了
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>

2.这一节点就写在</configSections>下面就好了,在Web.config里的智能提示中没有这个节点
<RewriterConfig>
<Rules>
<RewriterRule>
<!--这个节点表示在根目录下访问index.html,比如说http://localhost/website/index.html,这个时候就会与这一项匹配-->
<!--如果地址是http://localhost/website/aaa/index.html,这个时候就不会与这一项匹配-->
<!--这个使用的时候,页面名称可以随便换,这里叫index.html,也可以叫成aaa.html,bbb.html,只要在访问、超链接、转向等时候写的是这个地址就可以了-->
<!--如果这个节点里写的是~/abc/list.html的话,那和访问路径就应该是http://localhost/website/abc/list.html-->
<!--
这里有一个最大的好处,不用考虑参数,比如说,我在index.html(Default.aspx)里有一个a标签,转到Default2.html(Default2.aspx)
并且带了参数<a href="Default.html?id=3&cid=7">go</a>
可以看到,下面那一节的配置方法还是这样写,不用考虑参数,参数就参传过去,也就是说在Default2.html(Default2.aspx)的cs文件里
还是像以前一样去得到参数就可以了Request.QueryString["id"],Request.QueryString["cid"]
-->
<LookFor>~/index.html</LookFor>
<!--这里就是上面这个地址指向的项目中真实的页面位置,这个就没有什么好多说的,把位置写正确才最重要的-->
<SendTo>~/Default.aspx</SendTo>
</RewriterRule>
<!--有多个节点就再写一对就好了-->
<RewriterRule>
<LookFor>~/Default2.html</LookFor>
<SendTo>~/Default2.aspx</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>

3.这个节点,在创建成Ajax网站时就已经有了,只要把里面的那二节加进去就OK了
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>

三、到此就结束了,在开发过程中,还是和以前一样,只是把访问路径的文件名由.aspx改成.html就可以了。
这里最重要的就是访问路径的配置,我的习惯就是aspx文件是什么样的路径,那html也是什么样的路径,这样写特别是对于已经开发过一段时间的项目来说
只要Web.config里这样对应起来去写,在页面上,只要把所的有.aspx改成.html就可以了!!
注意:如果用替换的方法的话,请在替换完成后,把Page指令里的CodeFile的值还改回XXX.aspx.cs,否则会出错

四、这里要说说IIS了,因为本地在开发的时候在Bin里面有dll文件,所以没事,但是放到IIS下就不行了,所以IIS在有一些操作
IIS 6.0:
选择要操作的网站,右键-属性-在第一个选项卡中点“配置”-添加-浏览-'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'-扩展名为:.html
-把'检查文件是否存在'去掉。一路再“确定”回去就好了。

IIS 7.0:
选择要操作的网站,在右边视图中找到'处理程序映射'-在右边'添加脚本映射'
请求路径:*.html
可执行文件:'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'
名称:自己看着写吧
然后确定就好了


最后说明一下,这样去配置伪静态的时候,会对原本的html文件有影响,所以,如果当有这种情况,特别是在使用ckeditor和ckfinder的时候,一定要在
web.config里再去配置一个节<buildProviders>,配置的位置是在<compilation debug="true">这里面
<compilation debug="true">
<assemblies>
......
</assemblies>
<!-- 加上此节点,保证原本就是.html类型的文件能正常访问,就是要加下面的这一节-->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>