PHP語法規則和flags

導語:在寫程序時,一定要掌握了基本語法規則,才能保證準確。下面是關於PHP的語法規則和flags,歡迎參考

PHP語法規則和flags

  【RewriteCond語法:】

RewriteCondTestStringCondPattern[flags]

rewritecond的其他用法:

‘-d’(目錄)

將TestString視爲一個路徑名並測試它是否爲一個存在的目錄。

‘-f’(常規文件)

將TestString視爲一個路徑名並測試它是否爲一個存在的常規文件。

‘-s’(非空的常規文件)

將TestString視爲一個路徑名並測試它是否爲一個存在的、尺寸大於0的常規文件。

‘-l’(符號連接)

將TestString視爲一個路徑名並測試它是否爲一個存在的符號連接。

‘-x’(可執行)

將TestString視爲一個路徑名並測試它是否爲一個存在的、具有可執行權限的文件。該權限由操作系統檢測

‘-F’(對子請求存在的文件)

檢查TestString是否爲一個有效的文件,而且可以在服務器當前的訪問控制配置下被訪問。它使用一個內部子請求來做檢查,由於會降低服務器的性能,所以請謹慎使用!

‘-U’(對子請求存在的URL)

檢查TestString是否爲一個有效的URL,而且可以在服務器當前的訪問控制配置下被訪問。它使用一個內部子請求來做檢查,由於會降低服務器的性能,所以請謹慎使用!

  【RewriteRule語法:】

RewriteRulePatternSubstitution[flags]

  【flags】:

‘chain|C’(鏈接下一規則)

此標記使當前規則與下一個規則相鏈接。它產生這樣的效果:如果一個規則被匹配,則繼續處理其後繼規則,也就是這個標記不起作用;如果該規則不被匹配,則其後繼規則將被跳過。比如,在一個目錄級規則中執行一個外部重定向時,你可能需要刪除””(此處不應該出現””)。

  ‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’(設置cookie)

在客戶端設置一個cookie。cookie的名稱是NAME,值是VAL。domain是該cookie的域,比如’’,可選的lifetime是cookie的有效期(分鐘),可選的path是cookie的路徑。

  ‘env|E=VAR:VAL’(設置環境變量)

此標記將環境變量VAR的值爲VAL,VAL可以包含可擴展的正則表達式反向引用($N和%N)。此標記可以多次使用以設置多個變量。這些變量可以在其後許多情況下被間接引用,通常是在XSSI(<!–#echovar=”VAR”–>)或CGI($ENV{‘VAR’})中,也可以在後繼的RewriteCond指令的CondPattern參數中通過%{ENV:VAR}引用。使用它可以記住從URL中剝離的信息。

‘forbidden|F’(強制禁止URL)

強制禁止當前URL,也就是立即反饋一個HTTP響應碼403(被禁止的`)。使用這個標記,可以鏈接若干個RewriteConds來有條件地阻塞某些URL。

  ‘gone|G’(強制廢棄URL)

強制當前URL爲已廢棄,也就是立即反饋一個HTTP響應碼410(已廢棄的)。使用這個標記,可以標明頁面已經被廢棄而不存在了。

 ‘handler|H=Content-handler’(強制指定內容處理器)

強自制定目標文件的內容處理器爲Content-handler。例如,用來模擬mod_alias模塊的ScriptAlias指令,以強制映射文件夾內的所有文件都由”cgi-script”處理器處理。

  ‘last|L’(結尾規則)

立即停止重寫操作,並不再應用其他重寫規則。它對應於Perl中的last命令或C語言中的break命令。這個標記用於阻止當前已被重寫的URL被後繼規則再次重寫。例如,使用它可以重寫根路徑的URL(‘/’)爲實際存在的URL(比如:’/e/www/’)。

  ‘next|N’(從頭再來)

重新執行重寫操作(從第一個規則重新開始)。此時再次進行處理的URL已經不是原始的URL了,而是經最後一個重寫規則處理過的URL。它對應於Perl中的next命令或C語言中的continue命令。此標記可以重新開始重寫操作(立即回到循環的開頭)。但是要小心,不要製造死循環!

  ‘nocase|NC’(忽略大小寫)

它使Pattern忽略大小寫,也就是在Pattern與當前URL匹配時,’A-Z’和’a-z’沒有區別。

  ‘noescape|NE’(在輸出中不對URI進行轉義)

此標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。一般情況下,特殊字符(‘%’,‘$’,‘;’等)會被轉義爲等值的十六進制編碼(‘%′,‘$′,‘;’等)。此標記可以阻止這樣的轉義,以允許百分號等符號出現在輸出中,比如:

RewriteRule/foo/(.*)/bar?arg=P1=$1[R,NE]

可以使’/foo/zed轉向到一個安全的請求’/bar?arg=P1=zed’。

  ‘nosubreq|NS’(不對內部子請求進行處理)

在當前請求是一個內部子請求時,此標記強制重寫引擎跳過該重寫規則。比如,在mod_include試圖搜索目錄默認文件()時,Apache會在內部產生子請求。對於子請求,重寫規則不一定有用,而且如果整個規則集都起作用,它甚至可能會引發錯誤。所以,可以用這個標記來排除某些規則。

使用原則:如果你爲URL添加了CGI腳本前綴,以強制它們由CGI腳本處理,但對子請求處理的出錯率(或者資源開銷)很高,在這種情況下,可以使用這個標記。

  ‘proxy|P’(強制爲代理)

此標記使替換成分被內部地強制作爲代理請求發送,並立即中斷重寫處理,然後把處理移交給mod_proxy模塊。你必須確保此替換串是一個能夠被mod_proxy處理的有效URI(比如以http://hostname開頭),否則將得到一個代理模塊返回的錯誤。使用這個標記,可以把某些遠程成分映射到本地服務器域名空間,從而增強了ProxyPass指令的功能。

注意:要使用這個功能,必須已經啓用了mod_proxy模塊。

  ‘passthrough|PT’(移交給下一個處理器)

此標記強制重寫引擎將內部request_rec結構中的uri字段設置爲filename字段的值,這個小小的修改使得RewriteRule指令的輸出能夠被(從URI轉換到文件名的)Alias,ScriptAlias,Redirect等指令進行後續處理[原文:Thisflagisjustahacktoenablepost-processingoftheoutputofRewriteRuledirectives,usingAlias,ScriptAlias,Redirect,andotherdirectivesfromvariousURI-to-filenametranslators.]。

舉一個能說明其含義的例子:如果要將/abc重寫爲/def,然後再使用mod_alias將/def轉換爲/ghi,可以這樣:

RewriteRule^/abc(.*)/def$1[PT]

Alias/def/ghi

如果省略了PT標記,雖然將uri=/abc/…重寫爲filename=/def/…的部分運作正常,但是後續的mod_alias在試圖將URI轉換到文件名時會遭遇失效。

注意:如果需要混合使用多個將URI轉換到文件名的模塊時,就必須使用這個標記。。此處混合使用mod_alias和mod_rewrite就是個典型的例子。

  ‘QSappend|QSA’(追加查詢字符串)

此標記強制重寫引擎在已有的替換字符串中追加一個查詢字符串,而不是簡單的替換。如果需要通過重寫規則在請求串中增加信息,就可以使用這個標記。

  ‘redirect|R[=code]‘(強制重定向)

若Substitution以http://thishost[:thisport]/(使新的URL成爲一個URI)開頭,可以強制性執行一個外部重定向。如果沒有指定code,則產生一個HTTP響應碼302(臨時性移動)。如果需要使用在300-400範圍內的其他響應代碼,只需在此指定即可(或使用下列符號名稱之一:temp(默認),permanent,seeother)。使用它可以把規範化的URL反饋給客戶端,如將”/~”重寫爲”/u/”,或始終對/u/user加上斜槓,等等。