首先咱們看一下這個.htaccess文件:php
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個指令:post
一、RewriteEngine 最簡單,控制重定向引擎的開關。第一條指令表示打開重定向引擎。url
二、RewriteCond 指令略微複雜一些。code
每一條這個指令定義一個條件,僅僅有這個條件知足時。跟在這個指令以後的那條 RewriteRule 纔會起做用。注意:這個指令僅僅爲以後的一條 RewriteRule 指令提供條件!比方,上面文件裏的第二條 RewriteRule 指令就不需要必須在以前的 RewriteCond 指令知足的狀況下才運行。server
假設想同一時候推斷多個條件的話。可以在後面加上 [OR] 標誌,表示臨時不結束推斷。繼續看下一條 RewriteCond 指令。blog
這條指令的第二個參數是被推斷的值,在這裏是server變量 %{REQUEST_FILENAME} ip
第三個參數是匹配模式,文件其中用到的幾個匹配模式的意思分別爲:it
-s 推斷第二個參數是不是server上存在的,大小大於0的常規文件;class
-l 推斷第二個參數是不是server上存在的,符號連接文件;變量
-d 推斷第二個參數是不是server上存在的,目錄;
假設符合這三條中的隨意一條,就會運行第一條 RewriteRule 指令。
三、那麼就讓咱們來看看 RewriteRule 指令。
RewriteRule 指令的第二個參數是個正則表達式。第一個起做用的 RewriteRule 指令的正則會應用於請求的URL地址(urlencode那種的);以後的RewriteRule指令則將正則應用於上一條指令的結果。
這條指令的第三個參數是被替換的值。- 表示保持原樣。不替換。
這條指令後面也可以加標誌。
比方 NC 標誌的意思是 no case。L 標誌就是 中止如下的 RewriteRule 指令的運行。
因此,ZF這個文件的意思就是假設是server中存在的文件,就不要作重定向。假設請求路徑中的文件不存在。就重定向到index.php。