使用rewrite在iis上设置规则来实现伪静态,这样在vs中开发的时候将无法调试,必须要是用iis发布才不会造成找不到文件的错误,当然,肯定还有其他的方法来实现伪静态的,不用再iis中设置任何的东西,只需要一个。net的组件和设置一下webconfig文件就ok了,来看一下,这东西,我用的次数很少,每次用都怕忘记,所以记录下来,下次忘记的话也不用Google啦
这回的准备工作,你必须去网上download一个URLRewriter.dll组件了,网上貌似有这个类库的源代码,当然里面也有编译好的dll文件,只需要把dll文件coty到自己站点的Bin下面,然后在网站上右键,添加引用,浏览选择这个dll文件即可。
下面就需要在webconfig里面配置一番了
1、在Web.Config的<system.web>和</system.web>添加以下节点:
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
2、在Web.Config的<configuration>和</configuration>添加以下节点:
<configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections> <RewriterConfig> <Rules> <RewriterRule> <LookFor>~/Default/.html</LookFor> <SendTo>~/Default.aspx</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/Detial_([0-9]*)/.html</LookFor> <SendTo>~/Detial.aspx?Id=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/List_p([0-9]*)/.html</LookFor> <SendTo>~/List.aspx?page=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/Double_t([0-9]*)_p([0-9]*)/.html</LookFor> <SendTo><!--[CDATA[~/Double.aspx?type=$1&page=$2]]--></SendTo> </RewriterRule> <RewriterRule> <LookFor>~/About_(.*)/.html</LookFor> <SendTo>~/About.aspx?title=$1</SendTo> </RewriterRule> </Rules> </RewriterConfig>
设置完以上两个步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。大家应该注意到了我写了2组<RewriterRule/>,其中第一组的是给单参数的地址用的,而另一组是给多参数动态文件用的。
相信大家如果用过在iis里面配置伪静态规则的话,那在webconfig里面配置规则自然不在话下,如果不会的话,就去找一些正则表达式的书看一下,不需要很精通就行
当然此方法有一些注意事项:
1.不能使用Windows身份验证用户权限. 应使用Form验证,在web.config配置为:<authentication mode="Forms" />
2.使用Request.ServerVariables["script_name"]获得的路径仍然是:ShowPlay.asp?vid=1
3.被重写的地址如果回发,重写将失效 显示的地址将是ShowPlay.asp?vid=1
4. 后缀名必须为.aspx.如果是其他自定义后缀名,如.net 请在iis将.net映射到aspnet_isapi.dll.
五个页面
About.aspx
<form id="form1" runat="server"> <div> 这是Aboutl页,url是About.aspx还是About.html?<br/> <br/> <br/> <a href="Default.html" mce_href="Default.html">主页</a> <br /> <br /> <a href ="List_p1.html">List页传page参数</a> <br /> <br /> <a href ="Detial_1.html">Detial页传值Id参数</a> <br /> <br /> <a href ="About_jianjie.html">About页传值title参数</a> <br /> <br /> <a href ="Double_t1_p1.html">Double页传值type和page参数</a> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </div> </form>
cs代码:
//About页面 public partial class About : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string title = Request["title"].ToString(); TextBox1.Text = "name为" + title; } } //Detial页面 public partial class Detial : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string Id = Request["Id"].ToString(); TextBox1.Text = "Id号为" + Id; } } //Double.aspx页面 public partial class Double : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string type = Request["type"].ToString(); string page = Request["page"].ToString(); TextBox1.Text = "type为:" + type + "page为" + page; } } //List.aspx页面 public partial class List : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string page = Request["page"].ToString(); TextBox1.Text = "页数为" + page; } }