我可以将JS和CSS放在公共文件夹之外吗?

时间:2010-06-22 23:15:49

标签: php .htaccess

如何将我的JS和CSS文件放在公用文件夹之外?我有一个图书馆,我希望我的所有网站都可以使用,并且为了便于更新,请将它放在特定网站的公共文件夹之外,以便所有人都可以轻松阅读。这是可能的还是我需要在另一个域上托管它(我宁愿不放心)。

htaccess可能吗?

4 个答案:

答案 0 :(得分:2)

正确扩展Jamie Wong的回应:

您可以使用充当控制器的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]

答案 1 :(得分:1)

你可以通过让代理人为你抓取文件,以一种尴尬的方式做到这一点。

你可以有一个php文件作为这些脚本的占位符,如下所示:

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

读取

中的文件

/home/your_user/main.css

通过file_get_contents

警告

非常确保style.php脚本无法访问您指定的文件夹之外的任何内容。这可能是一个巨大的安全漏洞

答案 2 :(得分:0)

不同的域/网站将起作用。 Web服务器不可能提供不在公用文件夹中的内容..您可能想要创建虚拟主机

答案 3 :(得分:0)

Web浏览器将请求JS和CSS文件。换句话说,浏览器不了解您的服务器目录结构......它只需要一个有效的URI。

最简单的解决方案是设置子域名:mycdn.example.com并将您的JS和CSS文件放在那里并直接引用每个站点。