apache重寫帶有get引數的url位址

2021-07-25 08:51:23 字數 2090 閱讀 8095

一,rewrite重寫時帶「?」(問號)引數的傳遞

很多人都會遇到需要將**以前的舊url轉換到新版本的新url來,但是有一些帶有引數的位址由於涉及到引數名的變更,需要通過偽靜態的方式實現跳轉。但apache和ngnix的方法是不支援帶引數的url位址重寫的(即:rewriterule不會去匹配「?」後面的字串的,需要用rewritecond來匹配)。

例如:把 /abc?id=123 重定向到 /def.php?id=123 的寫法:

方式一:

rewriteengine on

rewritebase /

rewritecond % ^id=(.+)$

rewriterule ^/abc$ /def.php?sid=%1 [l]

**#注釋1:rewritecond % ^id=(.+)$ ,得到url中的變數,並通過「%n」的方式獲取(引數名可以重寫,而且引數值可以匹配)

**#注釋2:rewritecond 裡面需要提取的值可以用 %n 進行反向引用值,而rewriterule裡面還是需要用$n的來反向引用值**

**

方式二:

rewriteengine

onrewritebase /

rewriterule

^/abc$ /def.php[l,qsa]

#注釋1:[qsa]表示保留重寫url時「?」後面的引數(但引數名不可以重寫,只會原樣的保留)

官方文件解釋(查詢字串):

pattern不會按照查詢字串進行匹配。為了達到這個目的,你必須使用乙個帶有% 變數的rewritecond指令。當然,你也可以在替換字串中建立包含查詢字串的url:在替換字串串中使用問號,以標明其後的部分應該被重新注入到query_string中。而要刪除乙個已有的請求串,則可以用問號來終結替換字串。為了聯合新舊查詢字串,請使用[qsa]標誌。

二、apache rewrite 終結篇:apache %

1.$n取得第n個引數值

rewriterule ^sss/(.*)/(.*)$ zdz/index.php?arg1=$1&arg2=$2
2.query_string(%後為匹配的正則)

url引數(query string)是url裡面「?」後面的部分,它通常用於傳輸引數給cgi指令碼或者其它動態頁面。在apache中,該值儲存在環境變數query_string中(在php中,可以通過$_server[『query_string』]訪問到)。

在apache中,大多對url進行操作的指令,如、redirect、alias和rewriterule,都不能直 接訪問該資料;不過,mod_rewrite模組卻可以對url引數進行新增、刪除和修改。其中的關鍵就是使用rewritecond來匹配% 變數,如果需要的話,還可以使用[qsa]標誌來附加url引數。

eg.1

如果 中的 query_string 包含字串forb ,則禁止訪問

rewritecond % forb

rewriterule ^(.).(.)$ preg.php?% [f]

eg.2

通過[qsa]標誌保留原有url引數的同時,在後面增加新的url引數:param=value

rewriterule ^/page /page?param=value [qsa]

eg3.

當url引數包含字串parm時

將url: 重寫為:

rewritecond % parm

rewriterule ^/ask /answer

eg4.%n反向引用

1)當訪問 /path 時,將字串 parm修改為 showparm

rewritecond % ^(.)parm(.)$

rewriterule /path /path?%1showparm%2

上面的%1和%2是反向引用,來自之前的rewritecond中正規表示式的匹配結果

2)將 轉換為:

rewritecond % ^(\w+)=(\w+)$

rewriterule ^/path /path/%1/%2?

apache路由重寫

apache路由重寫,目的在於去掉url訪問時,位址中的index.php 1.開啟apache的路由重寫模組。在apache的配置檔案中查詢下面的關鍵字,並去掉前面的 即取消遮蔽 loadmodule rewrite module modules mod rewrite.so2.在專案的根目錄下面...

apache重寫規則

本文旨在提供如何用apache重寫規則來解決一些常見的url重寫方法的問題,通過常見的 例項給使用者一些使用重寫規則的基本方法和線索。二 為什麼需要用重寫規則?乙個 如果是長期需要放在internet上提供服務,必定會有不斷地更新和維護,如臨 時轉移到其它伺服器進行維護,重新組織目錄結構,變換url...

Apache位址重寫

1.開啟mod rewrite模組 2.httpd.conf檔案中,options followsymlinks allowoverride all order deny,allow deny from all allowoverride後面的引數改為all 3.在apache的www目錄下建立.h...