
日期:2008-07-05 作者:喜騰小二 來源:PHPChina
本文旨在提供如何用Apache重寫規則來解決一些常見的URL重寫方法的問題,透過常見的實例給使用者一些使用重寫規則的基本方法和線索。
一、為什麼需要用重寫規則
網站的生命在於不斷地進行更新和維護,根據業務發展的需求轉移伺服器進行維護、重新組織目錄結構、變換URL甚至改變到新的網域名稱等情況是經常發生的。為了讓客戶不會因此受到任何影響,最好的方法就是使用Apache Rewrite Rule(重寫規則)。
二、重寫規則的作用範圍
1.使用在Apache主配置檔案httpd.conf中。
2.使用在httpd.conf裡定義的虛擬主機配置中。
3.使用在基本目錄的跨越配置檔案.htaccess中。
三、重寫規則的應用條件
當使用者的Web請求最終被導嚮到某臺Web伺服器的Apache守護處理序,Apache根據配置檔案判斷該請求是主配置還是虛擬主機,再根據使用者在浏覽器中請求的URL來比對重寫規則,並且根據實際的請求路徑比對.htaccess中的重寫規則,最後把請求的內容傳回給使用者。該回應可能有2種。
1.將請求內容外部重定嚮(Redirect)到另一個URL
讓浏覽器再次以新的URL發出請求(R=301或者R=302,暫時的或是永久的重定嚮)。
例如,一個網站有正規的URL和別名URL,對別名URL進行重定嚮到正規URL,或者網站改換成了新的網域名稱,則把舊的網域名稱重定嚮到新的網域名稱。
2.由Apache內部子請求代理產生新的內容送回給客戶[P,L]
這是Apache內部根據重寫後的URL,透過代理模組請求內容並將最終內容送回給客戶,用戶端浏覽器不必再次請求,浏覽器中的URL不會被重寫,但實際內容由Apache根據重寫規則後的URL生成。
例如,在公司防火牆上執行的Apache啓動這種代理重寫規則,代理對內部網段上的Web伺服器的請求。
fasdfadsf
四、重寫規則怎樣工作我們假定在編譯Apache時已經把mod_rewrite編譯成模組,確信您的httpd.conf中有LoadModule rewrite_module libexec/mod_rewrite.so,並且在Addmodule中有Addmodule mod_rewrite.c,則可以使用重寫規則。
當外部請求到達Apache,Apache調用重寫規則中的定義來重寫由使用者浏覽器指定請求的URL,最後被重寫的URL如果是重定嚮,則送交浏覽器做再一次請求;如果是代理則把重寫後的URL交給代理模組請求最終的內容(Content),最後把內容送回給浏覽器。
假如您對網站內容所在的伺服器沒有管理員授權權,或者您的網站內容放在ISP的伺服器上託管,無法改寫主配置檔案,但是您對Web站點內容所在的目錄有寫授權權,則可以設定自己的.htaccess檔案達到同樣的目的。但您需要確定主配置檔案中對您的網站所在的目錄定義了下麵的內容,否則您的.htaccess不會工作。