分类分类
关注+2011-01-07作者:清晨
4.18
说明 | 将适用于特定的文件系统的目录和子目录的指令编组 |
语法 | |
使用环境 | server config, virtual host |
示例:
<DirectoryMatch "^/www/(.+/)?[0-9]{3}"> # ... directives here ...
不要忘了在每个< DirectoryMatch>标签中包含 RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.19
说明 | 将应用于匹配文件名的指令包装起来 |
语法 | <Files filename> ... |
使用环境 | server config, virtual host, directory, .htaccess |
示例:
<Files index.*> # ... directives here ... <Files ~ "\.(gif|jpe?g|png)$"> # ... directives here ...
不要忘了在每个
4.20
说明 | 将应用于匹配文件名的指令包装起来 |
语法 | <FilesMatch regex> ... |
使用环境 | server config, virtual host, directory, .htaccess |
<FilesMatch "\.(gif|jpe?g|png)$">
不要忘了在每个
4.21
说明 | 把被包装起来的指令集应用到匹配的URL或者虚拟路径 |
语法 | <Location URL-path|URL> ... |
使用环境 | server config, virtual host |
该URL-path是一个形式为“/path/”的虚拟路径。没有协议、主机名、端口号、查询请求字符串被包含在内。URL-path可以包含通配符?和*或者以~字符打头的正则表达式。
示例:
<Location /directory> # ... rules go here# ... more rules go here
不要忘了在每个
4.22
说明 | 把被包装起来的指令集应用到正则表达式匹配的URL上 |
语法 | <LocationMatch regex> ... |
使用环境 | server config, virtual host |
这个指令的语法和指令"><Location ~>正则表达式语法完全一样。
示例:
<LocationMatch "/(home|section)/bin"> # ... rules go here
不要忘了在每个
RewriteEngine onRewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]注意这个规则可能破坏页面与CSS文件、图片等的相对链接。至所以这样是因为在浏览器中用于推算完整资源URI的基本路径(页面的父文件夹)发生了变化。只有在您使用目录分隔符作为替代字符时才会发生这个问题。有三种可用的解决方案:
RewriteEngine onRewriteRule ^(.*?\.asp)~([^~]*)~([^~]*)(.*) $1$4?$2=$3 [NC,LP,QSA]富关键词URLs
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.com和www.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]
本文导航
- 第1页: 首页
- 第2页: 安装程序
- 第3页: MSI的自定义行为自定义行为
- 第4页: Apache下mod_rewrite的兼容性
- 第5页: 正则表达式
- 第6页: 正则表达式
- 第7页: RewriteRule指令
- 第8页: RewriteCond指令
- 第9页: RewriteProxy指令
- 第10页: RewriteMap指令
- 第11页: RewriteOptions指令
- 第12页: LogLevel指令
- 第13页: RewriteEngineon指令指令
- 第14页: 重定向非www的版本到www
- 第15页: 故障处理
- 第16页: 精简版的限制
- 第17页: 常见ISAPI_Rewrite规则写法
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论