天天看點

php rewrite 規則,Apache RewriteCond ReWrite規則

Apache通過RewriteCond設定ReWrite規則,可以在httpd.conf配置檔案中直接設定rewrite規則,也可以根據需要在網站的.htaccess檔案中設定rewrite規則。

RewriteCond 重寫規則執行條件

文法:

[php]RewriteCond TestString CondPattern[/php]

生效域:

[php]server config(伺服器全局), virtual host(虛拟主機), directory(目錄), .htaccess[/php]

上面的 TestString, 可提供反向引用. 引用模式為: %N 其中N為(0 < = N <=9), 引用目前若幹RewriteCond條件中最後符合的條件中的分組成分, 也就是括号裡的内容.不過用到的不多. 反向應用多在RewriteRule裡常用.

RewriteCond 文法中的 TestStrng 為要被檢查的内容, CondPattern 是進行比對的規則, 它是一個相容Perl風格的正規表達式和一些其他的特有字元屬性. 這裡介紹一下.

[php]第一個: ! (感歎号) 表示否的意思. 比如一個條件: 判斷通路此頁面的上一頁URL是否包含 sex 字元的話可以用這樣: RewriteCond %{HTTP_REFERER} !(sex)

第二個: < 就是小于的意思, TestString < CondPattern.

第三個: > 就是大于于的意思, TestString < CondPattern.

第四個: = 相等的意思. , = 三個和通常程式語言使用的 , = 功能類似.

第五個: -d 是否是一個目錄. 判斷TestString是否不是一個目錄可以這樣: !-d

第六個: -f 是否是一個檔案. 判斷TestString是否不是一個檔案可以這樣: !-f

第七個: -s 是否是一個正常的有大小的檔案. 判斷TestString是否不是一個正常的有大小的檔案可以這樣: !-s

第八個: -l 是否是一個快捷方式檔案. 判斷TestString是否不是一個快捷方式檔案可以這樣: !-l

第九個: -x 是否是一個檔案并且又執行權限. 判斷TestString是否不是一個檔案并且又執行權限可以這樣: !-x

第十個: -F 檢查TestString是否是一個合法的檔案,而且通過伺服器範圍内的目前設定的通路控制進行通路。這個檢查是通過一個内部subrequest完成的, 是以需要小心使用這個功能以降低伺服器的性能。

第十一個: -U 檢查TestString是否是一個合法的URL,而且通過伺服器範圍内的目前設定的通路控制進行通路。這個檢查是通過一個内部subrequest完成的, 是以需要小心使用這個功能以降低伺服器的性能.[/php]

另外RewriteCond 指令後面可帶 Flag, 現在隻要2個可用, 一個是 NC|nocase, 不區分大小寫的意思. 一個是 OR|ornext 表示連接配接下一個條件的意思.

RewriteCond 實際需要使用情況比如要判斷一個條件成真的時候才執行相關的重寫操作. 緊接着它下面的 RewriteRule 總是在RewriteCond 條件判斷為真的時候才被執行.

看下面的一個例子:

[php]#開啟伺服器重寫模式

RewriteEngine on

#來自 www.opensoce.com 的連接配接通路本站時都隻能通路 test.php 這頁.

RewriteCond %{HTTP_REFERER} (a.opensoce.com)

RewriteRule (.*)$ test.php

#來自 www.opensoce.com 的連接配接通路本站時都隻能通路 newTest.php 這頁.

RewriteCond %{HTTP_REFERER} (b.opensoce.com)

RewriteRule (.*)$ newTest.php[/php]

RewriteCond其實很簡單. 就像程式裡的 if() 這樣的效果.