2013-02-20 73 views
0

我有清理URL的mod_rewrite的規則:的mod_rewrite重定向到CSS文件

RewriteRule ^tshirts*$ /thsirt.php 

的想法是,參觀myurl.com/tshirtmyurl.com/tshirts應該重定向到myurl.com/tshirt.php

參觀myurl.com/tshirt正常顯示tshirt.php,直到我說外部樣式錶鏈接tshirt.php - 現在它實際上重定向到CSS文件,所以我留下了CSS文件(tshirt.css)的原料來源。

,並使其更加混雜,如果我瀏覽到myurl.com/tshirts,它拋出的tshirt.php一個404

來源:

來源 tshirt.css
<html> 
<head> 
    <title>Page title</title> 
    <link rel="stylesheet" type="text/css" href="/tshirt.css" /> 
</head> 
<body> 
    <h1>Hello, world.</h1> 
</body> 
</html> 

body{ 
    background-color: #4F5557; 
} 

任何想法可能會導致這種情況或如何解決它?

+1

它看起來像你的重寫規則是匹配你的CSS文件,嘗試'^重寫規則T恤衫/?$/thsirt.php' – 2013-02-20 22:55:57

+0

的簡單的解決方案是將CSS保存在不符合該規則的其他文件夾中,如「/ resources」或「/ css」。 – jchapa 2013-02-20 22:56:47

回答

2

最好的解決方案是覆蓋所有的基礎,基本上確保你只會重寫你需要的東西,而不應該是這樣。

首先,作爲一個默認情況下,你應該看看不重寫任何指的是一個特定的文件或目錄,使用:

# Do Not apply if a specific file or folder exists 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

添加以下接下來,您還可以指定某些目錄忽略規則,可能存在其他用途​​,例如被稱爲腳本或資源的外部鏈接。

# Do Not apply if refering to a resource in one of these folders 
RewriteCond %{REQUEST_URI} "/admin/" [OR] 
RewriteCond %{REQUEST_URI} "/scripts/" [OR] 
RewriteCond %{REQUEST_URI} "/external/" 
RewriteRule (.*) $1 [L] 

於是最後,你可以有你的規則/ S

RewriteRule ^tshirts*$ /tshirt.php 
+0

照顧它;謝謝。然而,去'myurl.com/tshirts'仍然會返回404 - 爲什麼? – 2013-02-21 15:17:18

0

通常你不會希望現有的任何文件或目錄的URL重寫,因此您的規則,然後添加2個條件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^tshirts*$ /thsirt.php 

爲不同類型的資源的一個明確的文件夾結構也有助於保持你的項目可管理。