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