Rewrite規則怎麼寫之Apache篇

2022-09-27 07:42:09 字數 1584 閱讀 3718

經常看到很多人求助,說他的idc不支援控制面板做301怎麼辦,或者說問偽靜態規則怎麼寫,所以寫這篇博文,主要本文主要討論在apache下,進行編寫rewrite規則。

首先,先說url的重寫規則怎麼寫。這個主要是用於做偽靜態。重程式設計客棧寫規則是放在.htawww.cppcns.comccess檔案下或apache的配置檔案(httpd.conf或sites_conf目錄裡的一些特定的**www.cppcns.com配置檔案),此文主要討論.htacess檔案(其實都差不多)。

開啟你的.htacess檔案,開頭內容如下:

rewriteengine on

rewritebase /

rewriteengine on是代表開啟rewrite,而rewritebase / 是表示所有規則前都存在「/」,寫了這條之後,你後面所有規則的開頭,只需要寫「^」就後了,但要注意的是,此規則僅在.htacess檔案中被支援,如果是伺服器配置檔案,此規則會被忽略、不必寫。

在正是寫規則前,先為大家講一下重寫中設計到的特殊字元的含義。

*代表前面0或更多個字元

+代表前面1或更多個字元

?代表前面0或1個字元

^代表字串的開始位置

$代表字串結束的位置

。為萬用字元,代表任何字元

\將跟在其後的字元還原為字元本身,例如「\+」代表的就是「+」,而非其它意思。

^在方括號裡表示非的意思。例如[^.]程式設計客棧代表非萬用字元。

那麼假如我們希望將「此類url偽靜態為「的形式,則規則如下:

rewriterule ^b/([0-9]+)/?$/b.php?id=$1 [l]

上面的例子中,^表示網域名稱後來的url的開始,$表示字串結束,也就是網域名稱後面的url結束。[0-9]表示乙個數字,因為只要url存在,其必然存在乙個id數字。緊接其後的+表示表示出現1個或多個數字。[0-9]+連在一起,表示字元以數字形式出現,數字範圍為0-9,出現次數為1或多次。$表示字串結束,?$表示在根網域名稱後到網域名稱結束,有0或1個字元。$1表示存在記憶體中的內容,也就是說第乙個圓括號中的內容。[l]表示如果規則匹配就停止,否則需要繼續執行剩下的規則,通常這個沒必要深究。

那除非偽靜態外,有時候我們還需要利用.htacess進程式設計客棧行301重定向。符號含義不變,舉例如下:

rewriteengine on

rewritecond % ^aaa\.com$ [nc]

rewriterule ^(.*) [r=301,l]

上述規則是將aaa.com 301 到 www.aaa.com,符號的含義相信不必再做解釋了。

那麼經過這兩條規則,你應該有所啟發了,如果你的**做改版,導致你的url結構發生了變化,怎麼辦?答案很簡單,我們可以利用.htacess檔案,通過寫rewrite規則,將老的url 301到新的url上。

rewriterule ^(.*?)/?index\.html$/$1? [l,r=301]

這個規則是將網域名稱下搜有a/index.html 301 到 a/ 的url下。規則是死的,最重要的是大家要活學活用,相信熟練掌握rewrite規則後,你會發現**所有的url與返回碼將會全部在你的掌控下!

本文標題: rewrite規則怎麼寫之apache篇

本文位址:

Nginx基礎 Rewrite規則

rewrite是nginx乙個特別重要的指令,該指令可以使用正規表示式改寫uri。可以指定乙個或多個rewrite指令,按順序匹配。1 區分大小寫匹配 2 不區分大小寫匹配 3 和 區分大小寫不匹配及不區分大小寫不匹配1 f和 f 判斷是否存在檔案 2 d和 d 判斷是否存在目錄 3 e和 e 判斷...

nginx URL重寫rewrite規則

語法 rewrite regex replacement flag 如 此處的 1用於引用 jpg 匹配到的內容,又如 rewrite bbs redirect 如上例所示,replacement可以是某個路徑,也可以是某個url 常見的flag flag 作用last 基本上都用這個flag,表示...

昊鼎王五 NGINX之Rewrite規則

昊鼎王五 nginx之rewrite規則 基礎知識 rewrite功能就是,使用nginx提供的全域性變數或自己設定的變數,結合正規表示式和標誌位實現url重寫以及重定向。rewrite只能放在server location if 中,並且只能對網域名稱後邊的除去傳遞的引數外的字串起作用,例如 只對...