基於ZF中的.htaccess文件學習Apache的Rewrite語法

首先咱們看一下這個.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。

相關文章
相關標籤/搜索