2011-01-07 30 views
0

我一直在努力讓過去兩個小時沒有任何運氣的情況下工作。我在谷歌和Apache文檔上尋找幫助,但我仍然無法找到一個出路。事情是這樣的:.htaccess RewriteCond在重寫後測試

我有兩個文件:

index.php 
public/css/screen.css 

我想在瀏覽器中輸入的任何URL重定向到index.php URL = $ 1,如果它不是一個文件。如果是,它應該重定向到public/$ 1。我嘗試使用以下重寫規則:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.*) public/$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php?url=$1 [QSA,L] 

不幸的是,由於重寫只發生的RewriteCond滿足後,前兩個的RewriteCond將測試針對CSS/screen.css,而不是公共/ CSS/screen.css。

是否有一個神奇的標誌,告訴Apache做RewriteRule,測試RewriteConds是否爲真,然後撤消重寫,如果不是?你們會怎麼做?

感謝

回答

0

的規則被首先比較,但沒有發生替換,除非所有的條件也匹配的 - 你不能直接影響這個。

由於REQUEST_FILENAME在.htaccess是服務器已經映射的URL,你應該做的事情如:(。*)

的RewriteCond%{DOCUMENT_ROOT} /公/ $ 1 -F 重寫規則公共/ $ 1 [L]

其中$ 1是什麼原先要求

的「剩餘」部分你也將需要一個適當的RewriteBase,因爲你重寫一個相對URL。