2014-01-07 82 views
2

我最近被問到是否可以讓我的朋友服務器地址更加用戶友好。他目前的網址是這樣的:使用htaccess重寫規則訪問相對的CSS/JS文件

http://wwww.example.com/site/index.php?page=home 
http://wwww.example.com/site/index.php?page=about/john 
http://wwww.example.com/site/index.php?page=portfolio/concept-art/2013 

他希望他們看起來像這樣

http://wwww.example.com/site/home 
http://wwww.example.com/site/about/john 
http://wwww.example.com/site/portfolio/concept-art/2013 

我本以爲這是非常簡單的,所以我寫了這以下的重寫。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/ 
RewriteRule ^([^_]*)$ index.php?page=$1 [L] 

這似乎爲基本環節的工作好像

http://wwww.example.com/site/home 

,但這樣的事情

http://wwww.example.com/site/about/john 

沒有CSS或JS將加載的。所以我現在通過製作所有文件的絕對路徑來解決這個問題,但是我擔心我的朋友會添加一個新的插件或者其他東西,並忘記他必須使它成爲絕對路徑。

我的問題

有什麼我可以改變或在我的htaccess的文件添加到得到CSS和JS文件使用相對路徑來加載?如果是這樣,我需要做什麼?

回答

5

最好使用這樣的規則:

RewriteEngine On 
RewriteBase /site/ 

RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA] 

然後對CSS/JS /更好的圖像在你的CSS使用絕對路徑,JS,圖片文件,而不是相對的。這意味着您必須確保這些文件的路徑始於http://或斜槓/

或者您可以嘗試在你的頁面的頭部添加此:

<base href="/" /> 

OR

<base href="http://domain.com/site/" /> 
+1

我可以」相信我沒有想到'base'總是忘記了基本的HTML解決方案。哈哈。我添加了一個PHP函數來自動生成基地,以防萬一他移動他的網站,但除此之外,這工作完美。 –

+0

非常歡迎,很高興它解決了。 – anubhava

1

有什麼我可以更改或添加在我的htaccess文件,以獲得CSS和js文件加載相對路徑?如果是這樣,我需要做什麼?

你可以只在網頁標題中添加適當的相對URI基地:

<base href="/site/" /> 

或者你可以蠻力使用mod_rewrite(不推薦)將用戶重定向:

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js)/(.*)$ $2/$3 [L] 
+0

我總是忘記嘗試像base這樣的基本html解決方案。哈哈。 –