asp.net伪静态html,IIS7 Asp.net使用URLRewriter做伪静态(完整代码示例)

简单介绍

通常我们为了增强搜索引擎的友好和提高用户体验,都会将文章内容生成静态页面,但是很多时候我们需要实时的显示以下信息,这样静态的页面就不太好处理了。当然我们也可是使用js来动态加载静态页面的数据,不过那样操作既费时也费力不划算,所以这里我们产生伪静态这种技术,他是介于静态和动态之间的,依靠技术将页面伪装成静态但本质却是动态的。

操作方法

目前Asp.net实现伪静态的方法也有好几种,但这我只介绍其中一个比较常用、使用也方便的方法:URLRewriter

URLRewriter 具有以下优点:

兼容性好,微软出品适用于多种场合

操作简单,只需要引入DLL,配置好相关规则

无需修改iis,这点对于使用虚拟主机的朋友尤为重要,因为空间商是不会把修改iss的权限给你的。

1、下载 URLRewriter 引入到项目中, 下载DLL文件 。如果不想在下载的朋友可以直接下载我的代码示例,里面有dll文件。

2、把dll文件引用到项目中。

3、配置Web.config,下面是我完整的Web.config配置,具体的说明上面也有。

C#

<?xml version="1.0" encoding="utf-8"?>

<!--

有关如何配置 ASP.NET 应用程序的详细信息,请访问

http://go.microsoft.com/fwlink/?LinkId=169433

-->

<configuration>

<!--第一步: 设置自定义配置节和处理程序声明 -->

<configSections>

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

</configSections>

<!--第二步:设置重写规则-->

<RewriterConfig>

<Rules>

<!---规则解释:

1、每个“<RewriterRule>.....</RewriterRule>”表示一个规则,可以写多个规则,但是需要注意从上向下匹配的。

2、<LookFor> 节点表示:需要匹配的模式的,也就是页面访问的来源地址

3、<SendTo> 节点表示:跳转的规则,我们实际跳转的页面地址

4、注意编写正则表达式, (.*):表示正则表达式 ,意思:“.”匹配除“\n”之外的任何单个字符,“*”表示不限制匹配次数。

5、$1、$2等等表示占位符,上下应该对应

6、尽量将复杂的规则写在上面。

-->

<!--规则一: 传递多个参数,使用注意位置对应-->

<RewriterRule>

<LookFor>~/Pages/(.*)/(.*)</LookFor>

<SendTo>~/Pages/Detail.aspx?p=$1&m=$2</SendTo>

</RewriterRule>

<!--规则二:传递单个参数-->

<RewriterRule>

<LookFor>~/Pages2/(.[0-9]*)\.html</LookFor>

<SendTo>~/Pages2/Detail.aspx?id=$1</SendTo>

</RewriterRule>

<!--规则三:带目录访问-->

<RewriterRule>

<LookFor>~/Pages/(.*).html</LookFor>

<SendTo>~/Pages/$1.aspx</SendTo>

</RewriterRule>

<!--规则四:根目录访问

这个规则的解释:如果访问根目录下面的任何页面,将跳转到相对应的aspx页面,

比如:输入index.html实际访问的就是index.aspx,about.html实际访问的是about.aspx。

-->

<RewriterRule>

<LookFor>~/(.*).html</LookFor>

<SendTo>~/$1.aspx</SendTo>

</RewriterRule>

</Rules>

</RewriterConfig>

<system.web>

<compilation debug="true" targetFramework="4.5" />

<httpRuntime targetFramework="4.5" />

</system.web>

<system.webServer>

<!---第三步: 这里指明不检查 <system.web> 节点。 这里是用IIS7.0及以上版本,所以这里需要声明,如果是以下版本配置方法是不一样的。

如果未配置这个会提示“检测到在集成的托管管道模式下不适用的 ASP.NET 设置 ”错误-->

<validation validateIntegratedModeConfiguration="false"/>

<!---第四步:设置模块-->

<modules>

<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />

</modules>

</system.webServer>

</configuration>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<?xmlversion="1.0"encoding="utf-8"?>

<!--

有关如何配置ASP.NET应用程序的详细信息,请访问

http://go.microsoft.com/fwlink/?LinkId=169433

-->

<configuration>

<!--第一步:设置自定义配置节和处理程序声明-->

<configSections>

<sectionname="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>

</configSections>

<!--第二步:设置重写规则-->

<RewriterConfig>

<Rules>

<!---规则解释:

1、每个“<RewriterRule>.....</RewriterRule>”表示一个规则,可以写多个规则,但是需要注意从上向下匹配的。

2、<LookFor>节点表示:需要匹配的模式的,也就是页面访问的来源地址

3、<SendTo>节点表示:跳转的规则,我们实际跳转的页面地址

4、注意编写正则表达式,(.*):表示正则表达式,意思:“.”匹配除“\n”之外的任何单个字符,“*”表示不限制匹配次数。

5、$1、$2等等表示占位符,上下应该对应

6、尽量将复杂的规则写在上面。

-->

<!--规则一:传递多个参数,使用注意位置对应-->

<RewriterRule>

<LookFor>~/Pages/(.*)/(.*)</LookFor>

<SendTo>~/Pages/Detail.aspx?p=$1&m=$2</SendTo>

</RewriterRule>

<!--规则二:传递单个参数-->

<RewriterRule>

<LookFor>~/Pages2/(.[0-9]*)\.html</LookFor>

<SendTo>~/Pages2/Detail.aspx?id=$1</SendTo>

</RewriterRule>

<!--规则三:带目录访问-->

<RewriterRule>

<LookFor>~/Pages/(.*).html</LookFor>

<SendTo>~/Pages/$1.aspx</SendTo>

</RewriterRule>

<!--规则四:根目录访问

这个规则的解释:如果访问根目录下面的任何页面,将跳转到相对应的aspx页面,

比如:输入index.html实际访问的就是index.aspx,about.html实际访问的是about.aspx。

-->

<RewriterRule>

<LookFor>~/(.*).html</LookFor>

<SendTo>~/$1.aspx</SendTo>

</RewriterRule>

</Rules>

</RewriterConfig>

<system.web>

<compilationdebug="true"targetFramework="4.5"/>

<httpRuntimetargetFramework="4.5"/>

</system.web>

<system.webServer>

<!---第三步:这里指明不检查<system.web>节点。这里是用IIS7.0及以上版本,所以这里需要声明,如果是以下版本配置方法是不一样的。

如果未配置这个会提示“检测到在集成的托管管道模式下不适用的ASP.NET设置”错误-->

<validationvalidateIntegratedModeConfiguration="false"/>

<!---第四步:设置模块-->

<modules>

<addtype="URLRewriter.ModuleRewriter, URLRewriter"name="ModuleRewriter"/>

</modules>

</system.webServer>

</configuration>

代码开发环境:VS2012,本地调试iis7,Web应用程序

注意事项:

如果部署到服务器上提示”检测到在集成的托管管道模式下不适用的 ASP.NET 设置“,请将服务器.Net FrameWork版本设置为V4.0/V4.5(集成),一般空间商都支持版本切换的。

发布者:柚子,转转请注明出处:https://ityouzi.com/archives/iis7-aspnet-urlrewriter.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值