2010-06-22 57 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文件放在那里,并直接引用每个站点。

相关问题