rewriteengine on
rewriterule ^/a/b$ ^/c$
不是工作,而是我的RewriteRule通過.htaccess發生了什麼問題? (爲什麼它需要RewriteBase?)
rewriteengine on
rewritebase/
rewriterule ^a/b$ ^c$
作品。
rewriteengine on
rewriterule ^/a/b$ ^/c$
不是工作,而是我的RewriteRule通過.htaccess發生了什麼問題? (爲什麼它需要RewriteBase?)
rewriteengine on
rewritebase/
rewriterule ^a/b$ ^c$
作品。
你使用的是什麼版本的Apache?從根目錄重寫時,不應該需要RewriteBase
。如果你不是,你可能需要它。舉例來說,我目前的配置(阿帕奇2.2)爲我的博客之一的一部分如下所示,和工作原理:
RewriteEngine On
RewriteRule ^/$ /blog/ [R]
RewriteRule ^/wordpress/(.*) /blog/$1 [R]
它可能不是使規則工作如此爲主導的斜線RewriteBase。另外,RewriteRule的第二個參數不是一個正則表達式。相反,嘗試:
RewriteRule ^/?a/b$ c
當應用從一個的.htaccess重寫規則,領先斜線將從URL,這將導致如果包括它的模式失敗被剝離。通過以「^ /?」開始模式,它將在主要配置文件和每個目錄配置文件中工作。
閱讀detailed mod_rewrite documentation瞭解重寫引擎的工作原理和RewriteBase的重要性。
編輯: 如mod_rewrite technical details提到和在文檔中爲RewriteRule和RewriteBase描述的,URL已經由每個目錄的重寫規則進行評估的時間轉換爲路徑。重寫引擎不再有可用的URL。相反,它會刪除以斜槓結尾的本地目錄前綴(保存.htaccess文件的目錄)。例如,假設訪問者請求「/var/www/foo/bar/baz.html」,並在「/var/www/foo/.htaccess」中設置了重寫規則。在每條規則前面,重寫引擎會去掉「/ var/www/foo /」,並將「bar/baz.html」與重寫規則進行匹配。處理完一條規則後,本地目錄前綴將被預置(除非替換以「http://」開頭)。所有重寫規則處理完畢後,重寫基地(如果設置)將替換本地目錄前綴;如果不是,則剝離文檔根目錄。重寫的URL然後被重新注入爲一個子請求。
你能否詳細說明爲什麼從'.htaccess'應用前導斜槓被剝離? – user198729 2010-01-26 06:05:18
@未知 - 這是一個很好的問題。如果你沒有讓任何人咬到這裏,你可以嘗試將它移到serverfault.com。我也鼓勵你接受更多你的問題的答案,甚至可能回答一些問題...... – 2010-01-26 04:21:25