RewriteBase URL-path
RewriteBase用于設(shè)定重寫的基準(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 。
RewriteBase指令顯式地設(shè)置了目錄級(jí)重寫的基準(zhǔn)URL。在下文中,你將看到RewriteRule可以用于目錄級(jí)的配置文件中(.htaccess)并在局部范圍內(nèi)起作用,即規(guī)則實(shí)際處理的只是剝離了本地路徑前綴的一部分。處理結(jié)束后,這個(gè)路徑會(huì)被自動(dòng)地附著回去。默認(rèn)值是"RewriteBasephysical-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)的,你必須在每個(gè)使用RewriteRule的.htaccess文件中使用RewriteBase指令。
例如,目錄級(jí)配置文件內(nèi)容如下:
# /abc/def/.htaccess -- /abc/def 目錄的配置文件
# 注意:/abc/def 是 /xyz 的物理路徑(例如存在一條'Alias /xyz /abc/def'指令)。
RewriteEngine On# 讓服務(wù)器知道我們使用的是 /xyz 而不是物理路徑 /abc/defRewriteBase /xyz
# 重寫規(guī)則RewriteRule ^oldstuff/.html$ newstuff.html
上述例子中,對(duì)/xyz/oldstuff.html的請(qǐng)求被正確地重寫為對(duì)物理文件/abc/def/newstuff.html的請(qǐng)求。
僅供Apache Hacker們參考
以下列出了內(nèi)部處理的詳細(xì)步驟:
請(qǐng)求: /xyz/oldstuff.html內(nèi)部處理過(guò)程: /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)
結(jié)果: /abc/def/newstuff.html
雖然這個(gè)過(guò)程看來(lái)很繁復(fù),但是由于目錄級(jí)重寫的到來(lái)時(shí)機(jī)已經(jīng)太晚了,它不得不把這個(gè)(重寫)請(qǐng)求重新注入到 Apache核心中,所以Apache內(nèi)部確實(shí)是這樣處理的。但是:它的開銷并不象看起來(lái)的那樣大,因?yàn)橹匦伦⑷胪耆贏pache服務(wù)器內(nèi)部進(jìn)行,而且這樣的過(guò)程在Apache內(nèi)部也為其他許多操作所使用。所以,你可以充分信任其設(shè)計(jì)和實(shí)現(xiàn)是正確的。



















