第一次使用伪静态,而且还是跳槽到一家新公司,第一个接手的网站要用。可怜我这个啥都不会的菜鸟。。 还好,我的上司,网络部主管,给提供了一个现成的例子,可是涅,照搬过来还是有问题,她很郁闷,那我更郁闷了,好吧,毕竟是我接手的项目,我得负责任。改,后来终于在n次修改配置文件,n次修改IIS后,算是成功了。总结一下,以免忘记
1、首先吧,要有重写路径的dll文件,在这里我用的是Intelligencia.UrlRewriter.dll,添加对它的引用
2、配置web.config文件 在这里我配置了四处,分别是:
第一处:指定重写url的dll文件,添加对它的引用,并设置标签名称为rewriter
<configuration>
<!-- -=S=- 为伪静态配置的文件 -->
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
</configuration>
<!-- -=E=- 为伪静态配置的文件 -->
第二处:同样是在<configuration /> 标签下
<!-- -=S=- 为伪静态配置的文件 -->
<rewriter>
<rewrite url="^/404.html/?$" to="/404.aspx" processing="stop"/>
<rewrite url="^/?$" to="/Index.aspx" processing="stop"/>
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
<rewrite url="~/product_(.+)_([0-9]+).html$" to="~/productInfo.aspx?ID=$2" processing="stop"/>
<rewrite url="~/product_(.+).html" to="~/product.aspx?TypeDesc=$1" processing="stop"/>
</rewriter>
<!-- -=E=- 为伪静态配置的文件 -->
如上则是为重写指定规则和重写到达页面,以<rewrite url="~/product_(.+)_([0-9]+).html$" to="~/productInfo.aspx?ID=$2" processing="stop"/>为例:
url的内容是指定重写后显示的格式,在这里的意思是,会显示为诸如:product_abc_123.html之类。(.+)是指定一个参数,该参数可以为任意值,([0-9]+),是第二个参数,该参数必须为数字格式, to的内容是指的实际到达的页面,后面的$符号必须是数字,指定传递的第几个参数,在这里是第二个。 不知道url里的那个$是不是指的有参数要传递。。
第三处配置: 配置在 <system.web/>标签里
<!-- -=S=- 为伪静态配置的内容 -->
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
<!-- -=E=- 为伪静态配置的内容 -->
第四处配置: 配置在<configuration/>的最后,这个位置应该不是固定的吧,我没验证。。 具体这块的内容我也不是很清楚。。
<!-- -=S=- 为伪静态配置的内容 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</modules>
<directoryBrowse enabled="true" />
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
</files>
</defaultDocument>
</system.webServer>
<!-- -=E=- 为伪静态配置的内容 -->
3、配置完成了之后接着就是为要重定向的内容规范格式了,我在这里以一个<li/>说明,<a/>标签里的href值就是遵循了web.config配置文件的url格式的,它指定的是第二个配置,
<li><a href='/product_<%#Eval("TypeDesc") %>.html' target="_blank">
<%# Eval("TypeName")%></a></li>
实际上跳转到product.aspx页面 在product.aspx.cs页面上用原来的方式取值,即是:如果有传参的话,同原来的取值方式,即可。
4、配置完成了之后,可能部属到IIS里并不会达到理想的效果,那么就要看站点的配置了,在这里我使用的IIS7.5,一直是提示找不到路径,, 那么解决方案就是:
打开IIS下网站功能视图,——>处理程序映射——>右侧“添加脚本映射”——> 在弹出框中填写 请求路径值为:*.html,可执行文件为:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll,名称值,随便填写,然后确定,即可。
这里指只接受后缀名为html的文件重写
IIS6的配置引用下别人的:http://down.chinaz.com/server/201201/1542_1.htm 嘿嘿
5、即使解决了4的问题,那么在浏览时,可能会发现一些图片路径不对,那么,如果如上配置,使重定向的页面都处于同一级目录下,那么就不会出现这个问题了。
这就是我碰到的问题和解决办法,记录下来,以免忘记。
6、好吧,一天还没过去,就又测试出来新问题了:我后台管理页面在Manager文件夹里放着,里面有几个html页面,都是为了管理员登陆退出用的,结果,问题,来了,如果登陆后台,则一直提示:
很让我郁闷啊,本地也配置好了,测试的都没问题,可是上传上去就出了这个问题了,还以为是服务器的错,结果是伪静态重写url路径的问题,既然在web.config里做了如上配置,只要是html页面一律重写,那么Manager文件夹的html页面也无法避免了,也被重写了,那么解决方案如下:
修改web.config配置文件 ,需要修改两处: [ps:参考:http://abcd9.com/?post=354]
a、在节点<system.web />下添加:
<httpHandlers>
<!--设置应用程序映射(url重写后要加的)-->
<add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
</httpHandlers>
b、在标签<compilation />里添加:
<!--设置应用程序映射(url重写后要加的)-->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
好吧,问题不是我解决的,是主管解决的。。 没文化,害死人哪。