首先我们看一下这个.htaccess文件:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
这里面涉及到了3个指令:
1、RewriteEngine 最简单,控制重定向引擎的开关。第一条指令表示打开重定向引擎。
2、RewriteCond 指令略微复杂一些。
每一条这个指令定义一个条件,仅仅有这个条件满足时。跟在这个指令之后的那条 RewriteRule 才会起作用。注意:这个指令仅仅为之后的一条 RewriteRule 指令提供条件!比方,上面文件里的第二条 RewriteRule 指令就不须要必须在之前的 RewriteCond 指令满足的情况下才运行。
假设想同一时候推断多个条件的话。能够在后面加上 [OR] 标志,表示临时不结束推断。继续看下一条 RewriteCond 指令。
这条指令的第二个參数是被推断的值,在这里是server变量 %{REQUEST_FILENAME}
第三个參数是匹配模式,文件其中用到的几个匹配模式的意思分别为:
-s 推断第二个參数是否是server上存在的,大小大于0的常规文件;
-l 推断第二个參数是否是server上存在的,符号链接文件;
-d 推断第二个參数是否是server上存在的,目录;
假设符合这三条中的随意一条,就会运行第一条 RewriteRule 指令。
3、那么就让我们来看看 RewriteRule 指令。
RewriteRule 指令的第二个參数是个正則表達式。第一个起作用的 RewriteRule 指令的正则会应用于请求的URL地址(urlencode那种的);之后的RewriteRule指令则将正则应用于上一条指令的结果。
这条指令的第三个參数是被替换的值。- 表示保持原样。不替换。
这条指令后面也能够加标志。
比方 NC 标志的意思是 no case。L 标志就是 停止以下的 RewriteRule 指令的运行。
所以,ZF这个文件的意思就是假设是server中存在的文件,就不要做重定向。假设请求路径中的文件不存在。就重定向到index.php。