您的位置:首页 > 运维架构 > Apache

基于ZF中的.htaccess文件学习Apache的Rewrite语法

2014-05-05 23:42 225 查看
首先我们看一下这个.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 指令。

这条指令的第二个参数是被判断的值,在这里是服务器变量 %{REQUEST_FILENAME} 

第三个参数是匹配模式,文件当中用到的几个匹配模式的意思分别为:

-s 判断第二个参数是否是服务器上存在的,大小大于0的常规文件;

-l 判断第二个参数是否是服务器上存在的,符号链接文件;

-d 判断第二个参数是否是服务器上存在的,文件夹;

如果符合这三条中的任意一条,就会执行第一条 RewriteRule 指令。

3、那么就让我们来看看 RewriteRule 指令。

RewriteRule 指令的第二个参数是个正则表达式。第一个起作用的 RewriteRule 指令的正则会应用于请求的URL地址(urlencode那种的);之后的RewriteRule指令则将正则应用于上一条指令的结果。

这条指令的第三个参数是被替换的值。- 表示保持原样,不替换。

这条指令后面也可以加标志。比如 NC 标志的意思是 no case,L 标志就是 停止下面的 RewriteRule 指令的执行。

所以,ZF这个文件的意思就是如果是服务器中存在的文件,就不要做重定向;如果请求路径中的文件不存在,就重定向到index.php。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Apache Rewrite 重定向 ZF