您好,欢迎您来到一龙网络,请 登录 注册
客服热线:18071780377
工作时间:周一至周日 全天24小时在线
海外虚拟主机租用
数据库租用
服务与支持
售后服务:售后支持7x24小时

全国客服热线:18071780377

提交工单

  • 功能强大
  • 四星认证
  • 正版授权
  • 多子目录
  • 性价比高
  • 八大机房
  • 每周备份
  • 7*24服务
  • 400电话
    ISAPI_Rewrite伪静态规则写法
 

一、伪静态软件ISAPI_Rewrite简介:

伪静态技术简而言之就是您的网站中的网页是以html一类的静态的页面形式展示出来的,但其实是用ASP一类的动态脚本来处理的,这样方便站长们可以实时的显示信息,也同时可以增强搜索引擎的友好页面,我们一般使用isapi rewrite这个软件做伪静态技术处理,可达到两者兼顾的效果。

二.常见伪静态规则写法:

1、配置文件示例:

配置文件分为两种: GLOBAL(服务器全局模式)和 INDIVIDUAL(站点独立设置模式)文件,GLOBAL(服务器端全局模式)配置文件应该被放在ISAPI-REWRITE 安装目录中,名为 httpd.ini 。这个文件可以通过开始菜单的快捷方式访问和配置,这个文件里面的映射规则为全局规则,将针对所有站点起效。INDIVIDUAL(站点独立设置模式)配置文件应该被放在虚拟站点的根目录内,也被命名为httpd.ini文件,这里面应该放置针对站点的映射配置设置,只针对被放置的虚拟站点有效。两种类型的 httpd.ini 都是标准的windows ini 文件。所有的映射规则应该被放置在 [ISAPI_Rewrite] 之后。之前的文件文本将被忽略。下面就为大家介绍一个httpd.ini文件写法实例:

[ISAPI_Rewrite]

# This is a comment

# 300 = 5 minutes

CacheClockRate 300

RepeatLimit 20

# Block external access to the httpd.ini and httpd.parse.errors files

RewriteRule /httpd(?:.ini|.parse.errors) / [F,I,O]

# Block external access to the Helper ISAPI Extension

RewriteRule .*.isrwhlp / [F,I,O]

# Some custom rules

RewriteCond Host: (.+)

RewriteCond 指令

2、ISAPI_Rewrite基本语法详解:

# 排除当前虚拟主机需要正常访问的域名(web.3637.com www.3637.com)

# RewriteCond Host: (?:web|www)\.eboat\.cn

# 多数情况下是一个,即当前提供二级域名服务的系统(如建站系统)

RewriteCond Host: web\.eboat\.cn

RewriteRule (.*) $1 [L]

# 解决不规范目录(末尾无/)的问题

# 但前提是目录名不含‘.’而文件名必须包含,否则无法区分两者

# 如果保证URL中的目录名称规范,则无需此规则

RewriteRule ^/([^.]+[^/]$) /$1/ [L,R]

# 提取任意的二级域名名称(即第一个词汇)

# 用[a-zA-Z0-9_-]限制名称字符,重写Url到Home/子目录下

# 如 test.3637.com => web.3637.com/Home/test

RewriteCond Host: ([a-zA-Z0-9_-]+)\.eboat\.cn

RewriteRule ^/(.*) /Home/$1/$2 [I,L]

[ISAPI_Rewrite]

RepeatLimit 1

# Defend your computer from some worm attacks

RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]

# 排除当前虚拟主机需要正常访问的域名(web.3637.com www.3637.com)

# RewriteCond Host: (?:web|www)\.eboat\.cn

# 多数情况下是一个,即当前提供二级域名服务的系统(如建站系统)

RewriteCond Host: web\.eboat\.cn

RewriteRule (.*) $1 [L]

# 解决不规范目录(末尾无/)的问题

# 但前提是目录名不含‘.’而文件名必须包含,否则无法区分两者

# 如果保证URL中的目录名称规范,则无需此规则

RewriteRule ^/([^.]+[^/]$) /$1/ [L,R]

# 提取任意的二级域名名称(即第一个词汇)

# 用[a-zA-Z0-9_-]限制名称字符,重写Url到Home/子目录下

# 如 test.3637.com => web.3637.com/Home/test

RewriteCond Host: ([a-zA-Z0-9_-]+)\.eboat\.cn

RewriteRule ^/(.*) /Home/$1/$2 [I,L]

3、ISAPI_Rewrite句法详解:

RewriteCond TestVerb CondPattern [Flags]这一指令定义一个条件规则,在 RewriteRule 或者 RewriteHeader或 RewriteProxy指令前预行RewriteCond指令,后面的规则只有它的,模式匹配URI的当前状态并且额外的条件也被应用才会被应用。

TestVerb

特别定义的动词匹配规定的表达式

TestVerb=(URL | METHOD | VERSION | HTTPHeaderName: | %ServerVariable) where:URL - returns Request-URI of client request as described in RFC 2068 (HTTP 1.1);

返回客户端在RFC2068中描述的需求的Request-URI

METHOD - returns HTTP method of client request (OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE);

返回客户端需求(OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE)的HTTP方法

VERSION - returns HTTP version;

返回HTTP版本

HTTPHeaderName - returns value of the specified HTTP header. HTTPHeaderName can be any valid HTTP header name. Header names should include the trailing colon ':'. If specified header does not exists in a client's request TestVerb is treated as empty string.

返回特定义的HTTP头文件的值

HTTPHeaderName =

Accept:

Accept-Charset:

Accept-Encoding:

Accept-Language:

Authorization:

Cookie:

From:

Host:

If-Modified-Since:

If-Match:

If-None-Match:

If-Range:

If-Unmodified-Since:

Max-Forwards:

Proxy-Authorization:

Range:

Referer:

User-Agent:

Any-Custom-Header

得到更多的关于HTTP头文件的和他们的值的信息参考RFC2068

ServerVariable

返回特定义的服务器变量的值 。例如服务器端口,全部服务器变量列表应在IIS文档中建立,变量名应用%符预定;

CondPattern

规则表达式匹配TestVerb

[Flags]

Flags is a comma-separated list of the following flags:

O (nOrmalize)

Normalizes string before processing. Normalization includes removing of an URL-encoding, illegal characters, etc. This flag is useful with URLs and URL-encoded headers

RewriteRule 指令

Syntax: RewriteRule Pattern FormatString [Flags]

这个指令可以不止发生一次,每个指令定义一个单独的重写规则,这些规则的定义命令很重要,因为这个命令在应用运行时规则是有用途的


I (ignore case)

不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令

F (Forbidden)

对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。

L (last rule)

不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写

N (Next iteration)

强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略

NS (Next iteration of the same rule)

以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目,

P (force proxy)

强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求,必须确认代理字符串是一个有效的URI包括协议 主机等等否则代理将返回错误

R (explicit redirect)

强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则

RP (permanent redirect)

几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码

U (Unmangle Log)

当URI是源需求而不是重写需求时记载URI

O (nOrmalize)

在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的

CL (Case Lower)

小写

CU (Case Upper)

大写

RewriteHeader directive

Syntax: RewriteHeader HeaderName Pattern FormatString [Flags]

这个指令是RewriteRule的更概括化变种,它不仅重写URL的客户端需求部分,而且重写HTTP头,这个指令不仅用于重写。生成,删除任何HTTP头,甚至改变客户端请求的方法

HeaderName

指定将被重写的客户头,可取的值与 RewriteCond 指令中TestVerb参数相同

Pattern

限定规则表达式以匹配Request-URI,

FormatString

限定将生成新的URI的FormatString

[Flags]

是一个下列FLAGS的命令分隔列表

三、使用ISAPI Rewrite实现服务器的防盗链:

1、完全屏蔽所有盗链来源(如有其他规则,请将以下代码至于已有规则上面)

RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

注:第一行通过RewriteCond的HOST定义其下的规则所适用的请求主机范围。

第二行通过RewriteCond的Referer定义规则适用的请求来源地址,我们都知道任何通过互联网方式访问网站都会留下Referer的痕迹,就好像我们在IIS日志里看到的一样。这里的(?!http://\1.*).*意思就是判断所有通过http协义发来的请求,都要应用规则。

第三行通过RewriteRule定义防盗链文件的后缀,这里仅是图片后缀,需要的可以添加mp3,rar等其它所有后缀。后面的/block.gif表示如果遇上这些后缀的文件被盗链后的转向,这里转向/根目录的block.gif,可以是HTML等任何文件。如果只想某个文件夹下面的文件不被盗链,只需要加上路径就可以。例如不想images和pic目录下的文件被盗,但其它可以。就要改写成:RewriteRule (/images/|/pic/).*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]这种情况主要是有些站长在别人友情链接里的图片地址是在自己这的。

最后面的[I,O,N],I表示不区分大小写,O表示对URL进行标准化,可能是用来处理Unicode编码的地址(例如包含中文的URL)以及QueryString的内容,N表示重新从站点请求文件而不是从本地缓存读取文件,目的是防止当用户访问了盗你链的网站后,再回到你的网站也出现盗链提示。

由于此规则是通过Referer来获取http://字样的地址而进行过滤的,因此他没法防范除HTTP以外的其他协议,如迅雷下载等等。

2、排除性防盗链的写法:

RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteCond Referer: (?!http://(.*)(\.baidu\.com|\.google\.com|\.google\.cn|\.g\.cn|\.gougou\.com|\.soso\.com|\.sogou\.com|\.youdao\.com|\.bing\.com|\.yahoo\.com|\.yahoo\.cn|\.eojoo\.com)).*
RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

注:第三行通过正则表达式对第二行中的请求协义地址进行过滤,这里按上面的写法,过滤了所有流行的搜索引擎,当然也包括你自己的站,或是你同台服务器其它的站。每个不同的域名写法是\.baidu\.com,多个有|号相隔。如果是IP则这样写100\.100\.100\.100

以上主要讲解了几种常见的防盗链方法的写法,基本上只是需要修改一下里面的一些信息换成你网站的基本信息既可以了。