國(guó)內(nèi)的虛擬機(jī)一般不提供.htaccess功能(據(jù)我所知,discuz的主機(jī)好像提供此功能),而在國(guó)外主機(jī)中,.htaccess功能似乎是標(biāo)配,筆者的Blog架在MT上,支持.htaccess,每次看到一堆別人寫(xiě)好了的.htaccess設(shè)置,很多命令都不甚了了,查看、修改起來(lái)很不方便,痛定思痛,潛心學(xué)習(xí)一下,知其所以然嘛~
學(xué)習(xí)前提:(不會(huì)的朋友要學(xué)習(xí)一下,才能更好的理解下面的文字呢)
Linux基礎(chǔ)(不會(huì)也沒(méi)事啦,寫(xiě)個(gè).htaccess沒(méi)必要大費(fèi)周折啦,推薦:鳥(niǎo)哥私房菜linux基礎(chǔ))
正則表達(dá)式(Rewrite規(guī)則建立在正則的基礎(chǔ)之上,推薦:正則表達(dá)式30分鐘入門(mén)教程)
rewrite的語(yǔ)法格式:
復(fù)制代碼 代碼如下:
RewriteEngine On #要想rewrite起作用,必須要寫(xiě)上哦
RewriteBase url-path #設(shè)定基準(zhǔn)目錄,例如希望對(duì)根目錄下的文件rewrtie,就是”/”
RewriteCond test-string condPattern #寫(xiě)在RewriteRule之前,可以有一或N條,用于測(cè)試rewrite的匹配條件,具體怎么寫(xiě),后面會(huì)詳細(xì)說(shuō)到。
RewriteRule Pattern Substitution #規(guī)則
RewriteEngine On|Off
RewriteEngine 用于開(kāi)啟或停用rewrite功能。
rewrite configurations 不會(huì)自動(dòng)繼承,因此你得給每個(gè)你想用 rewrite功能的虛擬主機(jī)目錄中加上這個(gè)指令。
RewriteBase URL-path
RewriteBase用于設(shè)定重寫(xiě)的基準(zhǔn)URL。在下文中,你可以看見(jiàn)RewriteRule可以用于目錄級(jí)的配置文件中 (.htaccess)并在局部范圍內(nèi)起作用,即規(guī)則實(shí)際處理的只是剝離了本地路徑前綴的一部分。處理結(jié)束后,這個(gè)路徑會(huì)被自動(dòng)地附著回去。默認(rèn)值 是”RewriteBase physical-directory-path”。
在對(duì)一個(gè)新的URL進(jìn)行替換時(shí),此模塊必須把這個(gè)URL重新注入到服務(wù)器處理中。為此,它必須知道其對(duì)應(yīng)的URL前綴或者說(shuō)URL基準(zhǔn)。通常,此前綴就是 對(duì)應(yīng)的文件路徑。但是,大多數(shù)網(wǎng)站URL不是直接對(duì)應(yīng)于其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來(lái)指定正確的URL前綴。
如果你的網(wǎng)站服務(wù)器URL不是與物理文件路徑直接對(duì)應(yīng)的,而又需要使用RewriteBase指令,則必須在每個(gè)對(duì)應(yīng)的.htaccess文件中指定 RewriteRule 。
RewriteCond TestString CondPattern [flags]
RewriteCond指令定義了一個(gè)規(guī)則的條件,即,在一個(gè)RewriteRule指令之前有一個(gè)或多個(gè)RewriteCond指令。 條件之后的重寫(xiě)規(guī)則僅在當(dāng)前URI與pattern匹配并且符合這些條件的時(shí)候才會(huì)起作用。
TestString是一個(gè)純文本的字符串,但是還可以包含下列可擴(kuò)展的成分:
RewriteRule反向引用: 引用方法是 $N (0 <= N <= 9) 引用當(dāng)前(帶有若干RewriteCond指令的)RewriteRule中的 與pattern匹配的分組成分(圓括號(hào)!)。
RewriteCond反向引用: 引用方法是 %N (1 <= N <= 9) 引用當(dāng)前若干RewriteCond條件中最后符合的條件中的分組成分(圓括號(hào)!)。
RewriteMap 擴(kuò)展: 引用方法是 ${mapname:key|default}
服務(wù)器變量: 引用方法是 %{ NAME_OF_VARIABLE } 這個(gè)是我們最常使用到的功能
NAME_OF_VARIABLE具體數(shù)值見(jiàn)下表: