.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处,没有什么安全危机。 所以放心设置吧。