RewriteBase URL-path
RewriteBase用于設定重寫的基準URL。在下文中,你可以看見RewriteRule可以用于目錄級的配置文件中 (.htaccess)并在局部范圍內起作用,即規則實際處理的只是剝離了本地路徑前綴的一部分。處理結束后,這個路徑會被自動地附著回去。默認值 是”RewriteBase physical-directory-path”。
在對一個新的URL進行替換時,此模塊必須把這個URL重新注入到服務器處理中。為此,它必須知道其對應的URL前綴或者說URL基準。通常,此前綴就是 對應的文件路徑。但是,大多數網站URL不是直接對應于其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來指定正確的URL前綴。
如果你的網站服務器URL不是與物理文件路徑直接對應的,而又需要使用RewriteBase指令,則必須在每個對應的.htaccess文件中指定 RewriteRule 。
RewriteBase指令顯式地設置了目錄級重寫的基準URL。在下文中,你將看到RewriteRule可以用于目錄級的配置文件中(.htaccess)并在局部范圍內起作用,即規則實際處理的只是剝離了本地路徑前綴的一部分。處理結束后,這個路徑會被自動地附著回去。默認值是"RewriteBasephysical-directory-path"。
在對一個新的URL進行替換時,此模塊必須把這個URL重新注入到服務器處理中。為此,它必須知道其對應的URL前綴或者說URL基準。通常,此前綴就是對應的文件路徑。但是,大多數網站URL不是直接對應于其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來指定正確的URL前綴。
如果你的網站服務器URL不是與物理文件路徑直接對應的,你必須在每個使用RewriteRule的.htaccess文件中使用RewriteBase指令。
例如,目錄級配置文件內容如下:
# /abc/def/.htaccess -- /abc/def 目錄的配置文件
# 注意:/abc/def 是 /xyz 的物理路徑(例如存在一條'Alias /xyz /abc/def'指令)。
RewriteEngine On# 讓服務器知道我們使用的是 /xyz 而不是物理路徑 /abc/defRewriteBase /xyz
# 重寫規則RewriteRule ^oldstuff/.html$ newstuff.html
上述例子中,對/xyz/oldstuff.html的請求被正確地重寫為對物理文件/abc/def/newstuff.html的請求。
僅供Apache Hacker們參考
以下列出了內部處理的詳細步驟:
請求: /xyz/oldstuff.html內部處理過程: /xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias) /abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule) /abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase) /xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)
結果: /abc/def/newstuff.html
雖然這個過程看來很繁復,但是由于目錄級重寫的到來時機已經太晚了,它不得不把這個(重寫)請求重新注入到 Apache核心中,所以Apache內部確實是這樣處理的。但是:它的開銷并不象看起來的那樣大,因為重新注入完全在Apache服務器內部進行,而且這樣的過程在Apache內部也為其他許多操作所使用。所以,你可以充分信任其設計和實現是正確的。