首頁 >php教程 >PHP开发 >apache伺服器開啟rewrite後的寫法與規則

apache伺服器開啟rewrite後的寫法與規則

黄舟
黄舟原創
2016-12-21 11:32:101426瀏覽

首先,先說URL的重寫規則怎麼寫。這個主要是用來做偽靜態。重寫規則是放在.htaccess檔案下或Apache的設定檔(httpd.conf或sites_conf目錄裡的一些特定的網站設定檔),此文主要討論.htacess檔(其實都差不多)。

 

開啟你的.htacess文件,開頭內容如下:

 

RewriteEngine on

 

RewriteBase /

前都存在“/ ”,寫了這條之後,你後面所有規則的開頭,只需要寫“^”就後了,但要注意的是,此規則僅在.htacess文件中被支持,如果是伺服器設定文件,此規則會被忽略、不必寫。

2

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

 

*代表前面0或更多字符

 

+代表前面1或更多字符

 

?代表前面0或1個字

 

^代表字串的起始位置

 

$代表字串結束的位置

 

。為通配符,代表任何字元

 

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

 

^在方括號裡表示非的意思。例如[^.]代表非通配符。

 

那麼假如我們希望將「http://www.AAA.com/b.php?id=1″此類URL偽靜態為「http://www.AAA.com/b/1″的形式,則規則如下:

 

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]表示如果規則匹配就停止,否則需要繼續運行剩下的規則,通常這個沒必要深究。

3

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

 

RewriteEngine on

 

RewriteCond %{HTTP_HOST} ^AAA.com$ [NC]

/$1 [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 到下。規則是死的,最重要的是大家要活學活用,相信熟練rewrite規則後,你會發現網站所有的URL與返回碼將會全部在你的掌控下!

 以上就是apache伺服器開啟rewrite後的寫法和規則的內容,更多相關內容請關注PHP中文網(www.php.cn)! 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn