2010-09-13 115 views
3

這是我到目前爲止有:如何從mod_rewrite規則中排除CSS,JS,JPG,GIF文件?

RewriteRule ^([A-Za-z0-9_]*)/?$ index.php?page=$1 [NC] 
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2 [NC] 
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2/$3 [NC] 

我所有的CSS文件位於/ SSI /。

網站結構本身/index.php?page=$whatever

$無論有時包括/人的,所以如果我去/不管/ whatever2,我目前的規則,它假設CSS是位於/whatever/ssi/*.css。

我希望所有這些都有道理。

所以,基本上我只是想寫一個條件,說:「如果它是一個CSS文件,不應用這些規則。」

謝謝你的任何幫助,我可以得到:)。

+0

知道了所有的設置,似乎在游泳。感謝你的幫助,每個人:)。 – Will 2010-09-13 18:40:37

回答

4

您所遇到的問題不在於mod_rewrite的被應用到css文件,而是在你的HTML給你的CSS路徑是相對的。瀏覽器只是從正確的相對路徑請求css。你真的有兩個選擇。

  1. 你的路到CSS相對於域的,而不是頁面(如使用/ssi/styles.css代替SSI/Styles.css中)
  2. 創建重寫規則,以所有的CSS重定向到正確的網址。 (例如,重寫規則(*的CSS)/ SSI/$ 1
+0

我相信你現在是對的,我認爲更多。我正在使用XAMPP和一個項目文件夾。所以當我做href =「ssi/main.css」時,它會將其附加到當前的url,這是錯誤的。如果我做href =「/ ssi/main.css」,它會執行http://localhost/ssi/main.css。它應該去http://localhost/projects/asdf/ssi/main.css。有沒有什麼辦法可以設置XAMPP/apache來使用基於項目文件夾的多個根目錄? – Will 2010-09-13 15:52:48

+0

不,我不認爲你可以有一個項目的多個根目錄。但是如果你所有的css真的都在/ ssi中,爲什麼不簡單地創建路徑/ssi/*.css? – cleek 2010-09-13 16:04:11

+0

因爲,正如我所說,我有多個項目。所以,如果我這樣做,它會指向http://localhost/ssi/*.css而不是http://localhost/projects/asdf/ssi/*.css,它實際上位於其中。 – Will 2010-09-13 16:07:53

0

......它假定css位於/whatever/ssi/*.css中。
我只是想寫一個條件,說:「如果它是一個CSS文件,不應用這些規則。」

這意味着直接

RewriteCond %{REQUEST_URI} !^/whatever/ssi/[^/]+\.css$ 
RewriteRule ... 
3

預見你使用Apache的mod_rewrite帶模塊,你應該嘗試的RewriteCond指令,下面的例子從排除所有的RewriteCond的比賽爲與下面的行RewriteRule指令。 的規則基本上是正則表達式。在我的示例中的一個排除了與任一的favicon.ico開始以及與CSS,它是文件夾,其中我的樣式表駐留的一切。

RewriteEngine On 
RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js) 
RewriteRule ^(.*)$ index.php/$1 [L] 

進一步閱讀: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

+0

非常感謝。我相信我的問題已經縮小到更多的是在我的標記中有相對路徑。我正在運行帶有項目文件夾的XAMPP,所以如果我做/ssi/main.css,它應該是http:// localhost/projects/asdf/ssi/main時執行http://localhost/ssi/main.css的CSS。有什麼辦法可以解決這個問題嗎? – Will 2010-09-13 15:56:14

0

我想我的解決方案將是最經驗之一,但它的工作:

RewriteEngine On 

RewriteBase/

RewriteRule ^([a-z0-9-]+)$ /?page=$1 [NC,L] 

RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)$ /?page=$1&action=$2 [NC,L] 

這將轉化http://example.com/?page=contact&action=sendhttp://example.com/contact/send 我的頁面值分別只有字母,數字和包含減號作爲字分隔符,但你可以替換值以匹配你需要的任何東西。

而且,當然,您需要在頁面中用斜槓在您的所有js,css,img目錄前綴。所以css/style.css應該是/css/style.css或使用絕對url。