Apache 詳解QSA,PT,L,E引數的作用

2022-06-07 10:30:13 字數 1792 閱讀 6421

[qsa]

當被替換的uri包含有query string的時候,apache的預設行為是,丟棄原有的query string 並直接使用新產生的query string,如果加上了[qsa]選項,那麼舊的query string 將會與新產生的query string組合起來,產生乙個新的query string 

demo:

rewriterule "/pages/(.+)" "/page.php?page=$1" [qsa]

當訪問:/pages/123?one=two 

會重寫成: /page.php?page=123&one=two

如果不用[qsa]

會重寫成:/page.php?page=123

[pt]

在rewriterule中的目標串(被替換完的路徑)都會被看做是檔案路徑,使用[pt]選項能夠讓apache將其看作是uri來對待。這也就是說,使用了[pt]選項,能夠使得rewriterule的結果重新加入到url的匹配當中去,讓那些基於本地匹配的,例如alias, redirect, or scriptalias,能夠有生效的機會。

如果漏了[pt]選項,那麼會導致報出 'file not found' 的錯誤

[l][l]能夠使得mod_rewrite 停止處理規則集。在眾多contexts中,這意味著,一旦規則匹配了,就沒有後續規則會被處理。這相當於perl的last命令,或者c的break命令。使用這個flag去指示當前規則應該立即應用,不用管後續的規則!

如果你也使用了rewriterule在 .htaccess 或者在 中那麼理解規則的處理過程是非常重要的。簡單來說,一旦規則被處理,就會發起乙個重寫請求給url解析引擎去重新處理這個url(譯者注:就是重寫的結果)。當這個重寫請求被處理的時候,.htaccess 和 就會被重新收集,因此規則集就會重新匹配。通常來說,如果乙個規則導致重定向到-,無論是內部重定向還是外部重定向,都會讓請求過程重新開始。

也是因為這個原因,如果你使用 rewriterule 指令在某個context中,那麼你要非常注意,防止閉環規則。並且不要單單關注有[l]flag那個結束執行一系列規則的那一條,還要理解整個流程。

有個可選的flag,[end],能夠結束不單單是當前這一round的重寫過程,還能阻止後續的重寫過程。

demo:

rewritebase "/"

rewritecond "%" "!=/index.php"

rewriterule "^(.*)" "/index.php?req=$1" [l,pt]

上面的demo會重寫所有請求到index.php,將原始請求作為乙個query string引數給index.php,利用rewritecond來確保如果當前請求已經是到index.php的,那麼就跳過

rewriterule。

[e]通過[e],或者[env] flag,你可以設定環境變數。記住,有一些環境變數會在規則執行之後被設定,因此有可能會覆蓋掉你設定的值。檢視 the environment variables document 這個文件能夠知道更多環境變數的運作。

完整的語法如下:

Apache 詳解QSA,PT,L,E引數的作用

當被替換的uri包含有 query string 的時候,apache 的預設行為是,丟棄原有的 query string 並直接使用新產生的 query string 如果加上了 qsa 選項,那麼舊的 query string 將會與新產生的 query string 組合起來,產生乙個新的 q...

Apache優化配置詳解

apache主配置檔案 設定伺服器的基礎目錄,預設為apache安裝目錄 serverroot usr local apache 2.2.6 設定伺服器監聽的ip和埠 listen 80 設定管理員郵件位址 設定伺服器用於辨識自己的主機名和埠號 servername www.uenu.com 80 ...

Apache的配置詳解

1.1 serverroot 配置 serverroot 主要用於指定apache的安裝路徑,此選項引數值在安裝apache時系統會自動把apache的路徑寫入。windows安裝時,該選項的值為windows安裝的路徑,linux安裝時該選項值為編譯時選擇的路徑 互斥 允許你為多個不同的互斥物件設...