2010-06-22 90 views
2

如何將我的JS和CSS文件放在公用文件夾之外?我有一個圖書館,我希望我的所有網站都可以使用,並且爲了方便更新,請在特定網站的公用文件夾外部進行更新,以便所有人都可以輕鬆閱讀。這是可能的還是我需要將其全部託管在另一個域上(我寧願不放心)。我可以將JS和CSS放在公用文件夾之外嗎?

htaccess可能嗎?

+0

ask on serverfault.com – 2010-06-22 23:18:02

+0

我同意serverfault。我猜你正在使用類Unix的操作系統。在這種情況下,軟鏈接可能會做你需要的。 – 2010-06-22 23:19:26

回答

2

要在傑米黃的響應適當擴大:

您可以輕鬆地做到這一點使用充當控制器的PHP文件 - 但你也必須記住發送正確的內容頭部否則瀏覽器可能無法識別的CSS這是什麼。

您還需要一點點的安全檢查,以確保沒有文件遍歷

// /public_html/style.php 

$cssDir = realname(dirname(__FILE__) . '/../css/'; 

if (!isset($_GET['sheet'])) { 
    header('HTTP/1.1 404 Not Found'); 
    exit; 
} 

$file = realpath($cssDir . $_GET['sheet'] . '.css'); 
if (!$file) { 
    header('HTTP/1.1 404 Not Found'); 
    exit; 
} 

if (substr($file, 0, strlen($cssDir) != $cssDir) { 
    // because we've sanitized using realpath - this must match 
    header('HTTP/1.1 404 Not Found'); // or 403 if you really want to - maybe log it in errors as an attack? 
    exit; 
} 

header('Content-type: text/css'); 
echo file_get_contents($file); 
exit; 

你可以走得更遠比這,併成立了的.htaccess重寫映射像/css/main.css CSS請求到此控制器:

RewriteEngine On 
RewriteRule ^css/(*.).css$ /style.php?sheet=$1 [L] 
+0

+1對於mod_rewrite。總是意味着要研究如何做到這一點,但從我學習rails以來就一直沒有打擾過。 – 2010-06-23 00:32:54

+0

重寫是前進的方向,雖然不是file_get_contents生病可能只是包括。謝謝 – Ashley 2010-06-23 18:26:48

+0

true - 使用include可以讓你在'樣式表'中使用PHP代碼,這樣你就可以設置參數化的顏色等等(CSS中缺乏的東西) – HorusKol 2010-06-23 23:30:09

0

不同的域名/網站將工作。 網絡服務器不可能發佈一些不在公共文件夾中的東西..你可能想要創建一個虛擬主機

+0

用Apache重寫模塊和正確的控制器邏輯,你可以很容易地做到這一點 – HorusKol 2010-06-22 23:28:15

1

你可以用一種尷尬的方式做到這一點,爲你。

你可以有充當這些腳本像這樣的佔位符的PHP文件:

www.example.com/style.php?sheet=main

通過file_get_contents

讀取你

/home/your_user/main.css

有一個文件

警告

非常確定style.php腳本無法訪問您指定的文件夾之外的任何內容。這可能是一個巨大的安全漏洞

0

JS和CSS文件將被Web瀏覽器請求。換句話說,瀏覽器不理解你的服務器目錄結構......它只需要一個有效的URI。

最簡單的解決方案是建立一個子域:mycdn.example.com,並把你的JS和CSS文件放在那裏,並直接引用每個站點。

相關問題