Rewrite規(guī)則怎么寫之Apache篇 |
發(fā)布時間: 2012/9/15 19:52:24 |
經(jīng)?吹胶芏嗳饲笾f他的IDC不支持控制面板做301怎么辦,或者說問偽靜態(tài)規(guī)則怎么寫,所以寫這篇博文,主要本文主要討論在Apache下,進(jìn)行編寫Rewrite規(guī)則。 首先,先說URL的重寫規(guī)則怎么寫。這個主要是用于做偽靜態(tài)。重寫規(guī)則是放在.htaccess文件下或Apache的配置文件(httpd.conf或sites_conf目錄里的一些特定的網(wǎng)站配置文件),此文主要討論.htacess文件(其實都差不多)。 打開你的.htacess文件,開頭內(nèi)容如下: RewriteEngine on RewriteBase / RewriteEngine on是代表開啟rewrite,而RewriteBase / 是表示所有規(guī)則前都存在“/”,寫了這條之后,你后面所有規(guī)則的開頭,只需要寫“^”就后了,但要注意的是,此規(guī)則僅在.htacess文件中被支持,如果是服務(wù)器配置文件,此規(guī)則會被忽略、不必寫。 在正是寫規(guī)則前,先為大家講一下重寫中設(shè)計到的特殊字符的含義。 *代表前面0或更多個字符 +代表前面1或更多個字符 ?代表前面0或1個字符 ^代表字符串的開始位置 $代表字符串結(jié)束的位置 。為通配符,代表任何字符 \將跟在其后的字符還原為字符本身,例如“\+”代表的就是“+”,而非其它意思。 ^在方括號里表示非的意思。例如[^.]代表非通配符。 那么假如我們希望將“?id=1″此類URL偽靜態(tài)為“″的形式,則規(guī)則如下: RewriteRule ^b/([0-9]+)/?$/b.php?id=$1 [L] 上面的例子中,^表示域名后來的URL的開始,$表示字符串結(jié)束,也就是域名后面的URL結(jié)束。[0-9]表示一個數(shù)字,因為只要URL存在,其必然存在一個id數(shù)字。緊接其后的+表示表示出現(xiàn)1個或多個數(shù)字。[0-9]+連在一起,表示字符以數(shù)字形式出現(xiàn),數(shù)字范圍為0-9,出現(xiàn)次數(shù)為1或多次。$表示字符串結(jié)束,?$表示在根域名后到域名結(jié)束,有0或1個字符。$1表示存在內(nèi)存中的內(nèi)容,也就是說第一個圓括號中的內(nèi)容。[L]表示如果規(guī)則匹配就停止,否則需要繼續(xù)運行剩下的規(guī)則,通常這個沒必要深究。 那除非偽靜態(tài)外,有時候我們還需要利用.htacess進(jìn)行301重定向。符號含義不變,舉例如下: RewriteEngine on RewriteCond %{HTTP_HOST} ^AAA\.com$ [NC] RewriteRule ^(.*) $1 [R=301,L] 上述規(guī)則是將AAA.com 301 到 ,符號的含義相信不必再做解釋了。 那么經(jīng)過這兩條規(guī)則,你應(yīng)該有所啟發(fā)了,如果你的網(wǎng)站做改版,導(dǎo)致你的URL結(jié)構(gòu)發(fā)生了變化,怎么辦?答案很簡單,我們可以利用.htacess文件,通過寫rewrite規(guī)則,將老的URL 301到新的URL上。 RewriteRule ^(.*?)/?index\.html$/$1? [L,R=301] 這個規(guī)則是將域名下搜有a/index.html 301 到 a/ 的URL下。規(guī)則是死的,最重要的是大家要活學(xué)活用,相信熟練掌握rewrite規(guī)則后,你會發(fā)現(xiàn)網(wǎng)站所有的URL與返回碼將會全部在你的掌控下! 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |