當被替換的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]
會重寫成:
在rewriterule
中的目標串(被替換完的路徑)都會被看做是檔案路徑,使用
[pt]選項能夠讓
apache
將其看作是
uri來對待。這也就是說,使用了
[pt]
選項,能夠使得
rewriterule
的結果重新加入到
url的匹配當中去,讓那些基於本地匹配的,例如
alias, redirect, or scriptalias,
能夠有生效的機會。
]/icons,並且有乙個
rewriterule
,那麼你需要使用
[pt]
選項來確保
alias會被計算到
如果漏了[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
的,那麼就跳過
通過[e],或者
[env] flag
,你可以設定環境變數。記住,有一些環境變數會在規則執行之後被設定,因此有可能會覆蓋掉你設定的值。
檢視the environment variables document
這個文件能夠知道更多環境變數的運作。
完整的語法如下:[e
Apache 詳解QSA,PT,L,E引數的作用
qsa 當被替換的uri包含有query string的時候,apache的預設行為是,丟棄原有的query string 並直接使用新產生的query string,如果加上了 qsa 選項,那麼舊的query string 將會與新產生的query string組合起來,產生乙個新的query ...
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安裝時該選項值為編譯時選擇的路徑 互斥 允許你為多個不同的互斥物件設...