PC6下载站

分类分类

ISAPI_Rewrite3使用教程

关注+2011-01-07作者:清晨

13RewriteEngine on指令指令

4.18指令

 

 

说明 将适用于特定的文件系统的目录和子目录的指令编组
语法 ...
使用环境 server config, virtual host

... 被用来封装一个只适用于指定的文件系统的目录和子目录的指令组。这个指令和<Directory ~> 语法相同。
示例:

<DirectoryMatch "^/www/(.+/)?[0-9]{3}">   # ... directives here ...  

不要忘了在每个< DirectoryMatch>标签中包含 RewriteEngine on指令,也不要将不能应用的规则封装进去。

4.19 指令

 

说明 将应用于匹配文件名的指令包装起来
语法 <Files filename> ...
使用环境 server config, virtual host, directory, .htaccess

指令以文件名限定了封装的指令的作用域。filename参数必须包含一个文件名,支持?和*以及以~字符打头的正则表达式。
示例:

<Files index.*>   # ... directives here ... <Files ~ "\.(gif|jpe?g|png)$">   # ... directives here ... 

不要忘了在每个标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。

4.20指令

 

说明 将应用于匹配文件名的指令包装起来
语法 <FilesMatch regex> ...
使用环境 server config, virtual host, directory, .htaccess

指令的语法和_指令"><Files ~>语法完全一样。

<FilesMatch "\.(gif|jpe?g|png)$"> 

不要忘了在每个标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。

4.21指令 

说明 把被包装起来的指令集应用到匹配的URL或者虚拟路径
语法 <Location URL-path|URL> ...
使用环境 server config, virtual host

... 标签用来将应用到特定URL或者虚拟路径的指令分组。将运算符完全从文件系统中分划出来,因此那些指令将不会用来控制对文件文件系统位置的访问。因为有几个不同的URL可能映射到相同的文件系统位置。
URL-path是一个形式为“/path/”的虚拟路径。没有协议、主机名、端口号、查询请求字符串被包含在内。URL-path可以包含通配符?和*或者以~字符打头的正则表达式。
示例:

<Location /directory>  # ... rules go here   # ... more rules go here

不要忘了在每个标签中包含RewriteEngine on指令,也不要将不需要用到的规则封套进去。

4.22指令

说明 把被包装起来的指令集应用到正则表达式匹配的URL上
语法 <LocationMatch regex> ...
使用环境 server config, virtual host

这个指令的语法和指令"><Location ~>正则表达式语法完全一样。
示例:

<LocationMatch "/(home|section)/bin">   # ... rules go here 

不要忘了在每个标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。

示例

注意:这些示例中所有的规则只适用于httpd.conf文件。在ISAPI_Rewrite以及在Apache的mod_rewrite中,规则的基本路径是不同的,取决于你放置.htaccess文件的目录。如果你将规则放在httpd.conf里的话,初始领头斜线必须存在,而在.htaccess文件中,到这些文件的虚拟路径会被截断。规则取决于以RewriteBase /指令引导的根路径,来允许它们在httpd.conf和目录级的.htaccess文件的任何位置上运作。
简单的搜索引擎友好的网址
下面这个例子演示了如何轻松地使用循环标记藏匿查询字符串参数。假设你有一个如下的URL:http://www.mysite.com/foo.asp?a=A&b=B&c=C,而且你希望以这样的地址来访问它:http://www.myhost.com/foo.asp/a/A/b/B/c/C
请尝试用下面的规则来达到预期的效果:
RewriteEngine onRewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]
注意这个规则可能破坏页面与CSS文件、图片等的相对链接。至所以这样是因为在浏览器中用于推算完整资源URI的基本路径(页面的父文件夹)发生了变化。只有在您使用目录分隔符作为替代字符时才会发生这个问题。有三种可用的解决方案:
1.使用下面的规则,它不影响基本路径,因为它没有用到目录分隔符“/”。
2.借助于标签直接为页面指定正确的base路径
3.把所有的页面相对链接都变成相对于根目录的地址或者绝对地址形式。
还存在着很多种用了不同的分隔符和文件扩展名的规则。例如,使用像这样的URL:http://www.myhost.com/foo.asp~a~A~b~B~c~C。下面的规则可以用来实现它:
RewriteEngine onRewriteRule ^(.*?\.asp)~([^~]*)~([^~]*)(.*) $1$4?$2=$3 [NC,LP,QSA]
富关键词URLs
在上面的例子中,我们使用很一般的技术来简单地藏匿查询字符串标记。但是很多对搜索引擎优化很有用的解决方案是让您的URL关键字丰富。看看下面的网址,例如:http://www.mysite.com/productpage.asp?productID=127这是大部分网站的常见情况。但是你可以通过使用这样形式的链接来显著地提高你的网页搜索引擎抓取率:http://www.mysite.com/products/our_super_tool.asp,URL中的关键词“our super tool”会被索引,并提高网页排名,但是“our_super_tool”不能直接被用来收回productid=127,这个问题存在几种解决方案。
第一个解决方案,我们建议你使用简短、只包含少数几个参数(既有关键词也有数字标识符)的URL形式,在样您的URL可能看起来如下:
http://www.mysite.com/products/our_super_tool_127.asp。实现这一重写目标只需要一个规则:
RewriteEngine onRewriteBase /RewriteRule ^products/[^?/]*_(\d+)\.asp /productpage.asp?productID=$1 [QSA]

另一个更复杂的解决方案是创建一对一的映射文件,并用它来映射“our_super_tool”到127。该解决方案对一些有很多参数的长URL来说很有用,并允许你隐藏数字标识符。这URL看起来像是http://www.mysite.com/products/our_super_tool.asp。请注意“our_supper_tool”部分必须是产品的唯一标识,是它的标识符。下面是这种解决方案的一个示例:

RewriteEngine onRewriteBase /RewriteMap mapfile txt:mapfile.txtRewriteRule ^products/([^?/]+)\.asp /productpage.asp?productID=${mapfile:$1}

而且你必需创建包含以下内容的mapfile.txt映射文件:

one_product       1another_product   2our_super_tool    127more_products     335

这种方法的优点是:你可以使用它来组合十分复杂的URL转换,但是这是一个小例子,是这个指南中的题外之话。
使用IIS作为反向代理 假设你有运行IIS的互联网服务器以及几台后台服务器或者应用程序运行在其它平台或者机器上。这些服务器不能直接在互联网上阅览,但是你必须为他人提供访问这些服务器的渠道。这里有一个演示如何简单地将某个网站的完整内容映射到另一个运行了ISAPI_Rewrite的站点的文件夹的示例:

RewriteEngine onRewriteBase / RewriteRule mappoint(.+) http://sitedomain$1 [NC,P]

藏匿文件扩展名: 虽然不可能将一个站点的所有的文件的扩展名都藏匿起来,但是我们可以使用ISAPI_Rewrite的文件检查功能来隐藏某些已知扩展名。这里有一个藏匿网站上.asp文件扩展名的规则示例:

RewriteEngine on#Redirect extension requests to avoid duplicate contentRewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]#Internally add extensions to requestRewriteCond %{REQUEST_FILENAME}.asp -f RewriteRule (.*) $1.asp

仿真基于主机头的虚拟网站 例如你已经注册了两个域名www.site1.comwww.site2.com。现在你可以使用同一个物理站创建两个不同的站点了。这里是一个规则示例:

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Emulate site1RewriteCond %{HTTP:Host} ^(?:www\.)?site1\.com$RewriteRule (.*) /site1$1 [NC,L,NS]#Emulate site2RewriteCond %{HTTP:Host} ^(?:www\.)?site2\.com$RewriteRule (.*) /site2$1 [NC,L,NS] 

现在只要把你的站点分别放到/site1和/site2目录下就可以了。注意www.site1.com和www.site2.com这两个域名必须在IIS中被映射到这个网站里,从而使ISAPI_Rewrite能拦截到请求。
或者,你可以使用更多通用的规则,从而把任何请求都映射到与请求主机名同名的文件夹里。

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Map requests to the foldersRewriteCond %{HTTP:Host} ^(www\.)?(.+)RewriteRule (.*) /%2$1 [NS]

网站的目录名应该是这样子的:/somesite1.com,/somesite2.info,等等。
阻断内联图像(阻止盗链) 假如你有一些页面插入了http://www.mysite.com/下的gif图片。一些其它站点将通过网页超链接插入这些图片。这会给你的网站增加很多无用的通讯量,而且你希望阻止这种做法。
虽然用ISAPI_Rewrite不能100%地保护图片不被盗链(只有专门的反盗链产品才能做到它),你至少可以在浏览器发来HTTP引用头的时候限制这种情况。下面的规则可以让你只允许来自同一主机的引用页或者空地址访问到这些图片。

RewriteEngine onRewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]


展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消