Rewrite規則怎么寫之Apache篇 |
發布時間: 2012/9/15 19:52:24 |
經常看到很多人求助,說他的IDC不支持控制面板做301怎么辦,或者說問偽靜態規則怎么寫,所以寫這篇博文,主要本文主要討論在Apache下,進行編寫Rewrite規則。 首先,先說URL的重寫規則怎么寫。這個主要是用于做偽靜態。重寫規則是放在.htaccess文件下或Apache的配置文件(httpd.conf或sites_conf目錄里的一些特定的網站配置文件),此文主要討論.htacess文件(其實都差不多)。 打開你的.htacess文件,開頭內容如下: RewriteEngine on RewriteBase / RewriteEngine on是代表開啟rewrite,而RewriteBase / 是表示所有規則前都存在“/”,寫了這條之后,你后面所有規則的開頭,只需要寫“^”就后了,但要注意的是,此規則僅在.htacess文件中被支持,如果是服務器配置文件,此規則會被忽略、不必寫。 在正是寫規則前,先為大家講一下重寫中設計到的特殊字符的含義。 *代表前面0或更多個字符 +代表前面1或更多個字符 ?代表前面0或1個字符 ^代表字符串的開始位置 $代表字符串結束的位置 。為通配符,代表任何字符 \將跟在其后的字符還原為字符本身,例如“\+”代表的就是“+”,而非其它意思。 ^在方括號里表示非的意思。例如[^.]代表非通配符。 那么假如我們希望將“?id=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 %{HTTP_HOST} ^AAA\.com$ [NC] RewriteRule ^(.*) $1 [R=301,L] 上述規則是將AAA.com 301 到 ,符號的含義相信不必再做解釋了。 那么經過這兩條規則,你應該有所啟發了,如果你的網站做改版,導致你的URL結構發生了變化,怎么辦?答案很簡單,我們可以利用.htacess文件,通過寫rewrite規則,將老的URL 301到新的URL上。 RewriteRule ^(.*?)/?index\.html$/$1? [L,R=301] 這個規則是將域名下搜有a/index.html 301 到 a/ 的URL下。規則是死的,最重要的是大家要活學活用,相信熟練掌握rewrite規則后,你會發現網站所有的URL與返回碼將會全部在你的掌控下! 本文出自:億恩科技【www.laynepeng.cn】 |