简单介绍
通常我们为了增强搜索引擎的友好和提高用户体验,都会将文章内容生成静态页面,但是很多时候我们需要实时的显示以下信息,这样静态的页面就不太好处理了。当然我们也可是使用js来动态加载静态页面的数据,不过那样操作既费时也费力不划算,所以这里我们产生伪静态这种技术,他是介于静态和动态之间的,依靠技术将页面伪装成静态但本质却是动态的。
操作方法
目前Asp.net实现伪静态的方法也有好几种,但这我只介绍其中一个比较常用、使用也方便的方法:URLRewriter
URLRewriter 具有以下优点:
- 兼容性好,微软出品适用于多种场合
- 操作简单,只需要引入DLL,配置好相关规则
- 无需修改iis,这点对于使用虚拟主机的朋友尤为重要,因为空间商是不会把修改iss的权限给你的。
1、下载 URLRewriter 引入到项目中, 下载DLL文件 。如果不想在下载的朋友可以直接下载我的代码示例,里面有dll文件。
2、把dll文件引用到项目中。
3、配置Web.config,下面是我完整的Web.config配置,具体的说明上面也有。
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 |
<?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> |
代码开发环境:VS2012,本地调试iis7,Web应用程序
注意事项:
如果部署到服务器上提示”检测到在集成的托管管道模式下不适用的 ASP.NET 设置“,请将服务器.Net FrameWork版本设置为V4.0/V4.5(集成),一般空间商都支持版本切换的。
发布者:柚子,转转请注明出处:https://ityouzi.com/archives/iis7-aspnet-urlrewriter.html