2010-01-26 89 views

回答

1

你使用的是什麼版本的Apache?從根目錄重寫時,不應該需要RewriteBase。如果你不是,你可能需要它。舉例來說,我目前的配置(阿帕奇2.2)爲我的博客之一的一部分如下所示,和工作原理:

RewriteEngine On  
RewriteRule ^/$ /blog/ [R] 
RewriteRule ^/wordpress/(.*) /blog/$1 [R] 
11

它可能不是使規則工作如此爲主導的斜線RewriteBase。另外,RewriteRule的第二個參數不是一個正則表達式。相反,嘗試:

RewriteRule ^/?a/b$ c 

當應用從一個的.htaccess重寫規則,領先斜線將從URL,這將導致如果包括它的模式失敗被剝離。通過以「^ /?」開始模式,它將在主要配置文件和每個目錄配置文件中工作。

閱讀detailed mod_rewrite documentation瞭解重寫引擎的工作原理和RewriteBase的重要性。

編輯: 如mod_rewrite technical details提到和在文檔中爲RewriteRuleRewriteBase描述的,URL已經由每個目錄的重寫規則進行評估的時間轉換爲路徑。重寫引擎不再有可用的URL。相反,它會刪除以斜槓結尾的本地目錄前綴(保存.htaccess文件的目錄)。例如,假設訪問者請求「/var/www/foo/bar/baz.html」,並在「/var/www/foo/.htaccess」中設置了重寫規則。在每條規則前面,重寫引擎會去掉「/ var/www/foo /」,並將「bar/baz.html」與重寫規則進行匹配。處理完一條規則後,本地目錄前綴將被預置(除非替換以「http://」開頭)。所有重寫規則處理完畢後,重寫基地(如果設置)將替換本地目錄前綴;如果不是,則剝離文檔根目錄。重寫的URL然後被重新注入爲一個子請求。

+0

你能否詳細說明爲什麼從'.htaccess'應用前導斜槓被剝離? – user198729 2010-01-26 06:05:18

相關問題