.htaccess 的配置规则 + 无法使用原因

linux下apache的 rewrite规则,不需要多说,没什么难度。

 

在IIS下,配置URL重写、反向代理、伪静态少不了,IIS_REWRITE模块。

破解版全功能下载:ISAPI_Rewrite3_full.zip(内含 官方中文文档,  以及  正则的一些基本知识)

 

稍微总结下:

^匹配由此开始,   $匹配由此结束,   ()      []         \  等等正则知识

开头:

RewriteEngine On
RewriteBase /

......

1. 重写条件可以有多个,2.然后紧接着重写规则, 3.[p]反向代理   [NP]不区分大小写......

 

重写条件有很多,比如:

RewriteCond %{REQUEST_FILENAME} !-f       如果文件夹存在就不进行下面第一条重写

RewriteCond %{REQUEST_FILENAME} !-d       如果文件存在就不进行下面第一条重写

 

规则就更多了,再搭配上[P]   [NP]等其他匹配,更多:

全站反向代理: RewriteRule    ^(.*)$    http://www.xxx.com/$1    [P]

...... 

 

我不喜欢使用,ProxyPassReverse 指令   ProxyPass 指令 进行代理,因为RewriteRule规则  再搭配[P],不仅灵活,而且完全可以实现ProxyPassReverse指令。

还有我发现很多WIN2003,不知道什么原因,在测试机器搭建OK。 直接搭建到其他机器不行,甚至根本不支持R。 估计也跟WIN2003版本,CPU位数,其他软件什么冲突...(原因见最后一段话)

更多说明,参见上面的RAR文档。

 

网载:

这句话的意思是兼容Helicon 2.X httpd.ini 规则 ,Helicon 3.X版本的规则文件统一成了.htaccess

RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 200
RewriteBase

问题1:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

不起作用

配置的时候加上文档的根目录:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f

问题2:

'ornext|OR'(或下一条件):它以OR方式组合若干规则的条件,而不是隐含的AND。

RewriteCond实例

RewriteCond %{REMOTE_HOST} ^host1.* [OR]

RewriteCond %{REMOTE_HOST} ^host2.* [OR]

RewriteCond %{REMOTE_HOST} ^host3.*

文档举例:

藏匿网站上.asp文件扩展名的规则示例:

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

 

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 on
RewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]

 

你可以使用更多通用的规则,从而把任何请求都映射到与请求主机名同名的文件夹里。

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

 

初级防盗链:

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

 

301重定向规则。

RewriteEngine on
RewriteCond %{HTTPS} (on)?
RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]

 

平衡负载均衡 仿真

RewriteEngine on
RewriteMap hosts rnd:hosts.txt
RewriteCond %{HTTP:Host} (www)\.mysite.com [NC]
RewriteRule (.*) http://${hosts:%1}.mysite.com$1 [R,L]

下面是hosts.txt文件的内容

www www1|www2|www3|www4|www5|www6|www7|www8|www9

 

 

 

 

经过2次严格测试,所以不能搭建的IIS_REWRITE环境。 经过,权限设置全部OK。

1. IIS_REWRITE的路径下面,给什么权限说不清楚,2台机器,一台给了OWNER权限解决问题。 一台给了EVERYONE权限才解决问题。

2.站点路径下面的httpd.ini  或者  .htaccess 文件一个给了  IUSR权限解决问题 一个给了EVERYONE才解决问题。

综上,都是权限问题。 索性将以上2处全部设置为EVERYONE权限。    放心,EVERYONE给了这2处,没有什么安全危机。   所以放心设置吧。

posted @ 2013-05-31 15:28  群叔  阅读(743)  评论(1编辑  收藏  举报