2010-04-05 102 views
4

所以我改寫了我的路徑是這樣的:URL/really/nice/paths/使用mod_rewrite規則是這樣的:重寫的CSS/JS路徑

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

的問題是我怎麼能改寫/圖像文件也爲JS/CSS的路徑,所以當他們被要求與相對路徑URL/really/nice/path/被服務從URL/scripts/,URL/styles/URL/images/文件夾而不是?這可以在不使用RewriteBase的情況下完成嗎?

+0

請澄清你的問題。每個HTTP請求文件時,用戶代理從不使用相對路徑。他們在請求之前解決它們。 – fuxia 2010-04-05 14:54:35

回答

11

當URL被重寫時,客戶端不知道它。因此,當客戶端查看URL「example.com/some/url/」中的頁面並且該頁面引用「images/image.jpg」中的圖像時,客戶端會在「example.com/some/」中查找圖像url/images/image.jpg「,即使頁面實際位於」example.com/some/other/url/「。那是你面臨的問題,對吧?

對於這個問題,有三種主要的解決方案:

  1. 使用絕對路徑的資源,而不是相對的。
  2. 使用<base>標記可確保客戶端知道構建其相對URL的根與頁面的明顯URL不同。
  3. 在您的重寫規則中爲「some/url/images /」添加新規則。

選項1可能是最好的主意,你會發現大多數使用URL重寫的網站都使用它,包括Stack Overflow本身。選項2是皺眉,但工作,相對容易。選項3是最難維護的,因爲在您定義新規則時,URL重寫異常和特殊情況可能會出現。

最可維護的解決方案是使用絕對URL。

+0

選項2具有吸引力。我不知道''標籤存在。它爲什麼皺起眉頭? 當你不得不從另一個JS文件加載一堆JS文件時,選項1不是很優雅。或者在CMS中使用圖像。 – 2010-04-05 21:33:49