今天为网站伪静态写一条规则,目的是过滤除了站点本身以外的域名地址。由于网站做了泛域名解析,所以输入IP地址,或者其它人把域名绑定到服务器的IP,都可以访问网站,今天就发现了一个域名,估计是好久没有用到了,一直就是解析这个IP,于是输入域名就到了网站,解决的方法就是在伪静态规则中把“除了网站域名以外的其它域名均过滤掉”。
先写出“本站允许的所有域名”吧,用正则表达式,只要包含主要的域名就行了。前面可以是二级子域名,于是写成:
/w+/.k8008/.com/.cn
后缀扩展一下,就成下面这样,允许有多个后缀,这样可以是.com或者.net,.com.cn之类的了
/w+/.k8008(/./w+)+
然后来转换成不含"k8008"的,这要用到正向预查了,"?="表示等于,“?!”表示不等于;要特别注意的是,预查后的位置,还是停留在预查之前,而不是从查完的字符开始找:
/w+/.(?!k8008)(/./w+)+
上面这个在查完k8008后,位置是停留在“(?!”之前的“/.”,再接着找的是(?!k8008)后面的“/.”,其实并没有哪个域名会两个点号相连的,所以出错,得不到任何结果。于是在重读正则手册N+1次后,终于写了下面这句:
/w+(?!/.k8008)(/./w+)+
非常简单,只需要把"/."移到预查里面就行了,最后加上边界条件,得到最终结果:
^/w+(?!/.k8008)(/./w+)+$