2011-04-06 94 views
0

的重寫規則是這樣的:重寫規則和相對路徑樣式表的問題

RewriteRule ^(.*)/(.*)$ index.php?search=$1&Page=$2 

樣式表的參考是這樣的:

<link type="text/css" rel="stylesheet" href="/css/style.css"> 

當我穿上樣式表重寫被忽略。請幫我寫出正確的規則,謝謝!

這是在.htaccess在根做/

+1

你能否擴展你的問題並告訴我們你想用這個重寫規則來達到什麼目的?實際上,它會通過/來接收每個請求並重寫它。 – 2011-04-06 18:44:05

+0

是的。我想擁有mydomain.com/searchterm/page URL結構,而忽略像/ css /和/ images /和/ includes /等目錄中的文件。 – Kevin 2011-04-06 18:54:20

+0

要清楚,'$ 1'將包含所有* final *斜槓在URL中,而不是第一個,因爲'。*'將匹配任何字符,*包括*任何斜線(除了最後一個,因爲它需要匹配整個模式)。這可能是你期望的,但它可能不是,所以我覺得值得一提。 – AgentConundrum 2011-04-06 19:02:24

回答

1

我假設你不想重定向任何請求實際存在的文件,而不僅僅是CSS文件。例如,如果你有一個帶有圖像文件的/images目錄,你可能不希望你的PHP腳本處理這個目錄,而不是你希望它處理你的CSS文件。

這些「標準」規定,提供的是:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

這些條件語句其中說:「如果下列條件爲假,忽略接下來RewriteRule被評估的實際情況是檢查,以確保。請求不是針對實際存在的文件或目錄

這意味着,當您請求/css/style.css時,Apache將會看到有一個該名稱的文件已存在,因此它將忽略您的重寫並提供文件直接。

+0

這也不錯,可能比我提出的更適合你的情況。如果你最終需要多個RewriteRule指令,這種方法可能會變得很笨重,但是如果你只是想將一個RewriteRule重寫到index.php,這種方式應該可以很好地爲你工作。 – Andrew 2011-04-06 18:53:17

+0

我喜歡這種方法,我需要將一些文件移動到/ include /目錄下才能完成這項工作。頁面部分通過ajax填寫並具有URL參數。當我打開它時,它們似乎打破了。 – Kevin 2011-04-06 19:26:21

1

鏈接到您的樣式表被改寫爲index.php文件。爲了避免這種情況,開始是這樣的:

RewriteRule ^css/ - [NC,L] 

這將導致不被改寫的CSS目錄什麼(除非有某種原因.htaccess文件中的CSS,這將是不尋常的)。

+0

Andrew你可以用這個來忽略一個特定的頁面,而不僅僅是一個目錄嗎?例如/ajax.php – Kevin 2011-04-06 19:44:49

+0

@凱文是的,你可以。連字符只意味着「不要重寫匹配」,而L標誌(「最後」)意味着不再處理任何指令。所以,像RewriteRule^ajax.php - [NC,L]應該工作。 – Andrew 2011-04-06 19:48:55