ASP.NET的SEO:正则表达式
目前国内主流的网站内容管理系统中,有大部分是可以将动态的PHP、ASP、ASPX等文档直接生成HTML的。但是由于有些网站的内容较多,因此如果单纯的采取直接生成的方式,将会占用大量的服务器资源。在这种情况下,我们就可以使用“伪静态”的方式,对网站URL静态化,以达到SEO的目的。
伪静态所需要的工具
如果网站使用的是独立服务器的话,那么我们就可以随意的对网站进行伪静态操作了,假如网站使用的服务器是Apache服务器,那么它自带了mod_rewrite来实现URL的重写功能(URL Rewrite)。但是如果使用的是windows服务器的话,IIS却没有自带的伪静态工具进行URL重写,遇到这样的情况时,我们就需要使用第三方插件来解决这个问题了。
目前在IIS上使用的比较多的URL重写工具是“ISAPI Rewrite” ISAPI Rewrite组件有免费版以及商业版,免费版只支持全局httpd.ini配置,不能对每个站点进行单独设置,除非通过加载不同的dll来实现。而商业版支持用户自定义httpd.ini文件,只要放在站点根目录下就能生效。这个大大方便了用户自己修改URL重写规则。
ISAPI Rewrite是一款基于正则表达式的,由C/C++编译的URL重写组件,其使用过程和apache的mod_rewrite基本相同。目前最新版本的ISAPI Rewrite可以支持Apache的 .htaccess文件来在IIS中使用 mod_rewrite。
ISAPI Rewrite的安装
ISAPI Rewrite有两种不同的安装方式,一种是安装包,另外一种是压缩包。如果您下载的是安装包,那么直接按照安装步骤进行安装即可。在这里重点阐述一下压缩包的安装方法。
首先,我们需要下载一个ISAPI Rewrite3的压缩包,下载地址如下:
http://www.helicontech.com/download-isapi_rewrite3.htm |
在解压到任意文件夹后,我们需要手动指向其ISAPI服务。
选中ISAPI筛选器,点击“添加”按钮,找到“ISAPI_Rewrite3.dll”文件,并且选中。
这里需要注意的一点是:ISAPI Rewrite3.Dll文件所属的文件夹一定要给予IIS_WGP组的读写权限,否则网站就会报错,导致“Service Unavailable”,应用程序池遇到错误而停止。
安装成功后,我们就需要对刚才安装的组建进行测试了。测试方法如下:
首先,我们需要制作一个简单的测试网页,URL为:http://127.0.0.1/new.asp?id=1234
然后,我们可以在ISAPI Rewritewe文件夹中找到httpd.ini文件,把它的只读属性去掉,打开编辑。例如我们现在需要将new.asp?id=1234修改为new/1234.html,那么我们可以在httpd.ini文件中,加入如下代码:
RewriteRule /news/(/d+)/.html /news/.asp/?id=$1 [N,I] |
保存之后,我们在浏览器输入http://127.0.0.1/new/1234.html,如果可以正常打开的话,那么我们的ISAPI Rewrite就安装成功了。如果不能正常打开,请检查文件夹权限、ISAPI的指向、优先级等内容。
1.1.3 ISAPI Rewrite的高级使用
为了减少服务器的资源,我们在很多时候会对我们网站的文件进行防盗链处理。而ISAPI Rewrite就可以做到这一点。
用ISAPI Rewrite作为防盗链工具的基本原理是:判断Referer是否来自本地主机或在信任列表中的域名,如果不是的话,就产生一个新的重写计划,并将其转向到某个放置盗链提示文件上。
下面的代码是httpd.ini的防盗链简单代码,仅供各位读者参考使用。
# ISAPI Rewrite2.0版本 RewriteCond Host: ^ (.+)$ RewriteCond Referer: ^ (?!http:////1.*).*$ RewriteCond Referer: ^ (?!http://(.*/.google/.com|*/.baidu/.com|*/.123/.com).*).*$ RewriteRule ^.*/.(?:gif|jpg|png|exe|rar|zip)$ /daolian.gif [I,O,N] # ISAPI Rewrite3.0版本 RewriteCond %{HTTP:Host} ^ (.+)$ RewriteCond %{HTTP:Referer} ^ (?!http:////1.*).*$ RewriteCond %{HTTP:Referer} ^ (?!http://(.*/.google/.com|*/.baidu/.com|*/.123/.com).*).*$ RewriteRule ^.*/.(?:gif|jpg|png|exe|rar|zip)$ /daolian.gif [NC,N,O] |
.*/.google/.com和*/.baidu/.com代表如果链接的网站是在百度或者Google搜索引擎的话,那么这样的连接是被允许的。其中的“*”代表百度或者Google下的任何二级域名。而后面的*/.123/.com是指本网站,这里各位读者可以更换成为自己的域名。当然,在这里还可以添加更多的被允许名单,为了各位读者使用方便,在本书光盘中,附带了以上这段防盗链代码,只需要添加到httpd.ini文件中即可。
本文件光盘路径:X:/正则表达式/防盗链程序代码.txt
1.1.4 正则表达式
由于ISAPI Rewrite是使用正则表达式规则的伪静态组建,因此我们需要对正则表达式有一个简单的了解。
所谓正则表达式,即为使用某种公式使得一类字符串被固定规则所替换。简单来说,ISAPI Rewrite中的正则表达式就是帮助我们将形如“news.asp?id=1234”这样的网址伪静态化为“news_1234.html”的规则。
我们用一个简单的httpd.ini文件来解释一下正则表达式的基本写法。
我们的任务是将URL:http://www.yourdomain.com/news.asp? class=seo&p=150变换成为http://www.yourdomain.com/seo/150这样的URL。
在修改httpd.ini文件之前,首先我们需要了解几个最简单的正则表达式
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^/w+$ //匹配由数字、26个英文字母或者下划线组成的字符串 |
我们在这里需要替换的有两个参数,一是class=?,二是p=?,我们可以看到,class是一个栏目的名称,其元素是不固定的,而p是文章的ID,也就是说是由数字构成的。因此,我们需要在httpd.ini中加入如下规则,以达到伪静态的目的。
RewriteRule ^(.*)/seo/([0-9]+)$ textarea/news/.asp/?class=seo&p=$1 [N,I] |
在这个正则表达式中,前面的(.*)是一个通配符,代表在/seo之前的所有内容不变,不需要伪静态。/seo/部分替代了/news/.asp/?class=seo&p=这一部分。“/”是转义符,([0-9]+)表示数字字符。于是就实现了伪静态的过程。
当然,如果有更多的参数,我们也可以使用简单的正则表达式来解决。例如上面的class部分如果是可变的,那么我们就在httpd.ini文件中,加上一下的这段规则。
RewriteRule ^(.*)/([a-z0-9/_]+)/([0-9]+)$ textarea/news/.asp/?class=&p= |
这里使用([a-z0-9/_]+)部分来代表可变的class部分。
实际上在ISAPI Rewrite中使用最多的两个正则表达式就是代表匹配字幕和数字的([a-z0-9/_]+)以及代表数字的([0-9]+),只要灵活的掌握这两点,并且按照上面的公式去套用的话,正则表达式并不是一件难办的事。
ASP.NET的SEO:正则表达式的更多相关文章
- ASP.NET的SEO:SEO Hack --- Html注入和Nofollow
ASP.NET的SEO:目录 黑帽(black hat)SEO主要是指采取"不怎么道德"(暂时就这么形容吧!)的方式进行搜索引擎优化. 1. 注入攻击,包括Sql注入和Html注入 ...
- ASP.NET的SEO:目录
ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.N ...
- 针对Asp.net MVC SEO的几点建议
1. 引言 SEO 即搜索引擎优化,很多web开发人员本应该熟悉,至少需要了解的一个知识点.像百度.必应等搜索引擎其实一直都在进化.但是有些优化的技巧可能在短时间内不变. 今天就给大家介绍几个专门针对 ...
- ASP.NET的SEO:HTTP报头状态码---内容重定向
本系列目录 我们经常说"404错误",你知道他指的是什么意思么? 404其实是Http报头所包含的一个"状态码",表明该Http请求失败.那么除此之外,还有哪些 ...
- ASP.NET的SEO:使用.ashx文件——排除重复内容
本系列目录 不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为"重复内容",如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高.所以我们应尽量避免各种重复内 ...
- ASP.NET的SEO: 服务器控件背后——SEO友好的Html和JavaScript
本系列目录 假设你需要从一个页面转向其他页面,下面有很多种方式,你是如何选择的呢?你能清晰的说明理由么? <%--链接的表现形式--%> <asp:Hy ...
- ASP.NET c# textbox 正则表达式 文本框只允许输入数字(验证控件RegularExpressionValidator )
<input type="text" name="test" onKeyUp="test1.value=(this.value=this.val ...
- ASP.NET的SEO:Linq to XML---网站地图和RSS Feed
本系列目录网站地图的作用是让搜索引擎尽快的,更多的收录网站的各个网页. 这里我们首先要明白一个基本的原理,搜索引擎的爬行方式.整个互联网就像一张纵横交错的"网":网的各个节点 ...
- ASP.NET的SEO:基础知识
本系列目录 首先谈一点我自己的体会,我还是希望能和大家分享: 当你读到一定数量的SEO资料后,你会发现,对同一个问题,众说纷纭,莫衷一是.这其实主要是因为以下一些原因造成的:1. 很多SEO技巧,是& ...
随机推荐
- Spark 1.4连接mysql诡异的问题及解决
在spark-default.conf文件中明明配置了mysql的数据源连接 随后启动spark-shell 执行如下测试代码: import org.apache.spark.{SparkConte ...
- PLSQL_Oracle临时表Temporary Table基本概念和用法(概念)
2014-06-08 Created By BaoXinjian
- uva 437 巴比伦塔(DAG上dp)
巴比伦塔 紫书P269 看完紫书,终于可以自己写一个dp了 :) [题目链接]巴比伦塔 [题目类型]DAG上dp &题意: 有n种立方体 n<=30,每种有无穷个,要求选一些立方体摞成一 ...
- lower_bound实现函数
lower_bound实现 [参考链接]lower_bound二分的三种写法 我在以前,总是用lower_bound,现在发现这样不行,有些复杂的数据结构二分的时候用这个会很麻烦,不如手写二分,我接着 ...
- 基于jquery的表单校验插件 - formvalidator使用体验
下载地址:http://www.formvalidator.net/ 基本样例 <form action="/registration" method="POST& ...
- sublime相关设置
1.设置Sublime Text新标签页打开文件 "open_files_in_new_window": false,
- JAVA 数组实例-求学生成绩的最大成绩,获取数组中的最大值、最小值
实例: import java.util.*; //求学生最大成绩 public class Test{ public static void main(String[] args){ System. ...
- 第4章 管道和FIFO
4.1 管道 管道是由pipe函数创建的,提供一个单向数据流. 头文件 #include <unistd.h> 函数原型 int pipe(int fd[2]); 返回值 成功则为0,出错 ...
- 九度OJ1468
这道题其实就是个很简单的静态链表,需要注意的是,地址一共有5位,最后输出的时候如果之前是使用int类型存储地址的话,一定要强制规定输出的位数(5位),否则有可能会将高位省略.(如地址00001输出为1 ...
- 常用自动化测试工具介绍(支持B/S、C/S)
一.功能测试工具1.QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是qui ...